Заголовки сервера, рефереры и т.д.

#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']

но это отправлено из пользовательского агента, что означает, что они могут отправлять все, что захотят