Какой самый надежный и безопасный способ определить, какая страница была отправлена или вызывается (через AJAX), на текущей странице. Я не хочу использовать $_SERVER['HTTP_REFERER']
из-за (отсутствия) надежности, и мне нужно, чтобы страница вызывалась только из запросов, происходящих на моем сайте.
Изменить: Я ищу, чтобы проверить, что сценарий, который предирует последовательность действий, вызывается со страницы на моем веб-сайте.
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 вызывал, а затем проверял сессию, если она имела значение страницы реферера и выполняла другое действие действие.
Хотя, с другой стороны, когда он запрашивает любую другую страницу, сделайте значение сеанса реферера равным нулю.
Помните, что переменная сеанса задается только для запроса страницы желаний.