Определение Referer в PHP

Какой самый надежный и безопасный способ определить, какая страница была отправлена ​​или вызывается (через AJAX), на текущей странице. Я не хочу использовать $_SERVER['HTTP_REFERER'] из-за (отсутствия) надежности, и мне нужно, чтобы страница вызывалась только из запросов, происходящих на моем сайте.

Изменить: Я ищу, чтобы проверить, что сценарий, который предирует последовательность действий, вызывается со страницы на моем веб-сайте.

Solutions Collecting From Web of "Определение Referer в PHP"

REFERER отправляется браузером клиента как часть протокола HTTP и поэтому является ненадежным. Возможно, он не существует, он может быть подделан, вы просто не можете доверять ему, если это по соображениям безопасности.

Если вы хотите проверить, поступает ли запрос с вашего сайта, вы не можете, но вы можете проверить, что пользователь был на вашем сайте и / или аутентифицирован. Куки-файлы отправляются в запросах AJAX, поэтому вы можете положиться на это.

То, что я нашел лучше всего, это токен CSRF и сохранить его в сеансе для ссылок, где вам нужно проверить реферер.

Поэтому, если вы генерируете обратный вызов FB, он будет выглядеть примерно так:

 $token = uniqid(mt_rand(), TRUE); $_SESSION['token'] = $token; $url = "http://example.com/index.php?token={$token}"; 

Тогда index.php будет выглядеть так:

 if(empty($_GET['token']) || $_GET['token'] !== $_SESSION['token']) { show_404(); } //Continue with the rest of code 

Я знаю безопасные сайты, которые эквивалентны этим для всех их безопасных страниц.

Использование $ _SERVER ['HTTP_REFERER']

Адрес страницы (если есть), которая ссылалась на пользовательский агент на текущую страницу. Это устанавливается пользовательским агентом. Не все пользовательские агенты установят это, а некоторые предоставляют возможность изменять HTTP_REFERER как функцию. Короче говоря, на это нельзя доверять.

 if (!empty($_SERVER['HTTP_REFERER'])) { header("Location: " . $_SERVER['HTTP_REFERER']); } else { header("Location: index.php"); } exit; 

Нет надежного способа проверить это. Это действительно под рукой клиента, чтобы сказать вам, откуда оно взялось. Вы могли бы представить, чтобы использовать информацию о файлах cookie или сессиях, помещенных только на некоторые страницы вашего сайта, но при этом вы нарушаете пользовательский интерфейс с закладками.

У нас есть только одна опция, оставшаяся после прочтения всех проблем с фальшивыми рефералами: т.е. страница, которую мы хотим отслеживать как реферер, должна храниться в сеансе, а так как ajax вызывал, а затем проверял сессию, если она имела значение страницы реферера и выполняла другое действие действие.

Хотя, с другой стороны, когда он запрашивает любую другую страницу, сделайте значение сеанса реферера равным нулю.

Помните, что переменная сеанса задается только для запроса страницы желаний.