Установлен ли HTTP_REFERER клиентом

Я слышал, что HTTP_REFERER можно подделать. У меня есть 2 сайта, первый связывается со вторым, а второй использует HTTP_REFERER для проверки того, что запрос от первого.

Если я получаю поддельный запрос с моего первого сайта на второй сайт и знаю, что этот запрос не был сделан, что я должен думать? третий веб-сайт подделывает http_ref для всех своих пользователей, или человек подделывает его в настройках своего браузера? Я хочу знать, устанавливается ли http_ref клиентом/браузером или самим веб-сайтом?


person danke    schedule 28.03.2011    source источник


Ответы (2)


Это информация, отправленная клиентом. Обычно это страница, на которой вы щелкнули ссылку.

Это также может быть подделано. Вы можете сделать это самостоятельно, установив HEADER в запросе PHP cURL.

curl_setopt( $ch, CURLOPT_HTTPHEADER, array(
        'Host: www.google.com',
        'Referer: http://google.com/', 
        'FaKeHEADER: ThisIsFakeButItWillBeSentAnyways'));  

Принимающий сервер увидит их в заголовке, даже если он никогда не был отправлен с google.com. Вы также можете подделать все остальное, что вы увидите в заголовке (пользовательские агенты, файлы cookie и т. д.).

Вам будет трудно обнаружить поддельные заголовки, если вы точно не знаете, как каждый из них должен выглядеть из каждого источника. Лучшее, что вы можете сделать, это работать с IP-адресами и ограничивать типы заголовков, которые вы принимаете (например, если страница может использовать только запросы GET, отклоняйте все запросы POST). Даже тогда, если кто-то захочет обмануть вас, скорее всего, они это сделают, а вы об этом не узнаете.

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

Редактировать: вы даже можете отправлять действительно поддельные заголовки. Я обновил пример, чтобы показать, что я имею в виду. Некоторые сайты используют пользовательские (например, поддельные) заголовки для прохождения аутентификации.

person PiZzL3    schedule 28.03.2011

Клиент может очень легко подделать его. Однако большинство людей не стали бы заморачиваться. В 99% случаев вы должны думать, что это правильное значение, если только у вас нет веских причин не верить в это (например, если вы подозреваете бота).

person Spyros    schedule 28.03.2011
comment
Да, для функциональности это нормально. В целях безопасности его не следует использовать. - person Brad; 28.03.2011
comment
Если бы это было 99%, это было бы более или менее неважно; увы, это ближе к 90% (или раньше было, я последний раз проверял в 2009 году) - так что это не совсем крайний случай. - person Piskvor left the building; 09.05.2011