Какой самый надежный и безопасный способ определить, какая страница отправлена или вызывается (через AJAX), на текущей странице. Я не хочу использовать $_SERVER['HTTP_REFERER']
из-за (отсутствия) надежности, и мне нужно, чтобы страница вызывалась только из запросов, происходящих на моем сайте.
Изменить. Я хочу проверить, что из страницы на моем веб-сайте вызывается script, который предирует последовательность действий.
Определение Referer в PHP
Ответ 1
REFERER отправляется браузером клиента как часть протокола HTTP и поэтому является ненадежным. Возможно, он не существует, он может быть подделан, вы просто не можете доверять ему, если он по соображениям безопасности.
Если вы хотите проверить, поступает ли запрос с вашего сайта, вы не можете, но вы можете проверить, что пользователь был на вашем сайте и/или аутентифицирован. Куки файлы отправляются в запросах AJAX, поэтому вы можете положиться на это.
Ответ 2
То, что я нашел лучше всего, это токен 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
Я знаю безопасные сайты, которые эквивалентны этим для всех их защищенных страниц.
Ответ 3
Использование $_ SERVER ['HTTP_REFERER']
Адрес страницы (если таковой имеется), которая ссылалась на пользовательский агент на текущая страница. Это устанавливается пользовательским агентом. Не все пользовательские агенты будут установите это, а некоторые предоставляют возможность изменять HTTP_REFERER как особенность. Короче говоря, на него нельзя действительно доверять.
if (!empty($_SERVER['HTTP_REFERER'])) {
header("Location: " . $_SERVER['HTTP_REFERER']);
} else {
header("Location: index.php");
}
exit;
Ответ 4
Нет надежного способа проверить это. Это действительно под рукой клиента, чтобы рассказать вам, откуда оно взялось. Вы можете представить, чтобы использовать информацию о файлах cookie или сессиях, размещенных только на некоторых страницах вашего сайта, но при этом вы нарушаете пользовательский интерфейс с закладками.
Ответ 5
У нас есть только одна опция, оставшаяся после прочтения всех проблем с фальшивыми рефералами: то есть Страница, которую мы хотим отслеживать как реферер, должна храниться в сеансе, а так как ajax вызывал, а затем проверял сессию, если у нее есть значение страницы реферера, а действие действует иначе, а не действие.
В то время как с другой стороны, когда он запрашивает любую другую страницу, сделайте значение сеанса referrer равным null.
Помните, что переменная сеанса задается только для запроса страницы желаний.