#php #javascript #http-headers
#php #javascript #http-заголовки
Вопрос:
У меня есть скрипт, называемый javascript.php , ведьма, которую я включаю в свой тег SCRIPT в моем html, вот так:
<script type="text/javascript" src="javascript.php"></script>
Что я хотел бы знать, возможно ли это при javascript.php чтобы проверить, обращался ли кто-то к нему напрямую, например:
http://myhost.com/javascript.php
А если кто-то включил это в свой HTML?
Точнее: есть ли заголовок, который сервер witch получает от клиента, если он запросил его напрямую через URL или через запрос СКРИПТА в источниках HTML?
Комментарии:
1. Не беспокойтесь. Firebug победит это тривиально.
Ответ №1:
Нет, при этом ничего не будет гарантировано.
Комментарии:
1. Он прав. Существует заголовок referer, но им можно легко манипулировать.
2. Мне нужно знать, включен ли он как скрипт в HTML или к нему можно получить прямой доступ, не более того 🙂
Ответ №2:
Простое решение, которое МОЖЕТ уменьшить количество «глупых» попыток включить ваш скрипт:
if(!empty($_SERVER['HTTP_REFERRER'])){
$parts = parse_url($_SERVER['HTTP_REFERRER']);
$allowed_hosts = array('example.com');
if(!in_array($parts['host'], $allowed_hosts)) {
exit;
}
}
Как ребята упоминали выше, заголовком реферера можно легко манипулировать. Если вы действительно хотите предотвратить эту проблему, вы можете добавить в путь к скрипту некоторые GET-параметры, которые генерируются с помощью простого правила, а затем проверить их. Например:
index.php
$c1 = rand();
$c2 = md5($c1.'HAHA');
$codes = '?c1='.$c1.'amp;c2='.$c2;
...
<script type="text/javascript" src="javascript.php<?php echo $codes; ?>"></script>
script.php
if(!isset($_GET['c1']) || !isset($_GET['c2']) || md5($_GET['c1'].'HAHA') != $_GET['c2']) {
exit;
}
...
Недостатком этого решения является то, что ваш JS-файл не будет кэшироваться браузером, потому что каждый раз он будет вызываться с разными параметрами.
Ответ №3:
$_SERVER['HTTP_REFERER']
но это отправлено из пользовательского агента, что означает, что они могут отправлять все, что захотят