Определение реферера в PHP



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


Edit: я хочу проверить, что скрипт, который формирует серию действий, вызывается со страницы на моем веб-сайте.

1241   5  

5 ответов:

реферер отправляется браузером клиента как часть протокола HTTP, и поэтому он действительно ненадежен. Его может не быть там, он может быть подделан, вы просто не можете доверять ему, если это по соображениям безопасности.

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

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

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

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

затем индекс.PHP будет выглядеть так:

if(empty($_GET['token']) || $_GET['token'] !== $_SESSION['token'])
{
    show_404();
} 

//Continue with the rest of code

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

С помощью переменная$_SERVER['HTTP_REFERER']

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

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

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

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

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

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

Comments

    Ничего не найдено.