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

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

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

Ответ 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.

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