Я знаю, что можно получить пустой HTTP_REFERER. При каких обстоятельствах это происходит? Если я получаю пустой, всегда ли это означает, что пользователь изменил его? Получается ли пустая такая же, как получение нулевого? и при каких обстоятельствах я получаю это тоже?
В каких случаях HTTP_REFERER будет пустым
Ответ 1
Он будет/может быть пустым, когда конечный пользователь
- ввел URL сайта в адресную строку браузера.
- посетил сайт с помощью поддерживаемой браузером закладки.
- посетил сайт в качестве первой страницы в окне/вкладке.
- нажал на ссылку во внешнем приложении.
- переключился с URL-адреса https на URL-адрес http.
- переключился с URL-адреса https на другой URL-адрес https.
- на нем установлено программное обеспечение безопасности (антивирус/брандмауэр/и т.д.), которое лишает реферера всех запросов.
- находится за прокси, который освобождает реферера от всех запросов.
- посещал сайт программно (вроде, curl) без настройки заголовка реферера (поисковые роботы!).
Ответ 2
HTTP_REFERER - отправлено браузером, указав последнюю страницу, которую просматривал браузер!
Если вы доверяете [HTTP_REFERER] по какой-либо важной причине, вы не должны, так как это может быть легко сфальсифицировано:
- Некоторые браузеры ограничивают доступ, чтобы не пропускать HTTP_REFERER
- Введите адрес в адресной строке, который не пройдет HTTP_REFERER
- открыть новое окно браузера не будет передавать HTTP_REFERER, потому что HTTP_REFERER = NULL
- имеет браузер, который блокирует его по соображениям конфиденциальности. Некоторые брандмауэры и AV-устройства делают это.
Попробуйте это расширение Firefox, вы сможете установить любые заголовки, которые вы хотите:
@Мастер празднования:
Firefox:
расширения: refspoof, refontrol, изменить заголовки, no-referer
Полностью отключить: этот параметр доступен в about: config в разделе "network.http.sendRefererHeader", и вы хотите установить его на 0, чтобы отключить передачу реферера.
Google chrome/Chromium:
расширения: noref, spoofy, внешний noreferrer
Полностью отключить: Chnage ~/.config/google-chrome/Default/Preferences или ~/.config/chromium/Default/Preferences и установить следующее:
{
...
"enable_referrers": false,
...
}
Или просто добавьте --no-referrers в ярлык или в cli:
google-chrome --no-referrers
Opera:
Полностью отключите: Настройки > Настройки > Дополнительно > Сеть и снимите флажок "Отправить информацию о реферере"
Веб-сервис Spoofing:
Автономный фильтр-прокси (spoof any header):
Подменю http_referer при использовании wget
"- реферер = URL
Spoofing http_referer при использовании curl
-e, --referer
Spoofing http_referer wth telnet
telnet www.yoursite.com 80 (press return)
GET /index.html HTTP/1.0 (press return)
Referer: http://www.hah-hah.com (press return)
(press return again)
Ответ 3
Список BalusC прочен. Еще один способ, которым это поле часто выглядит пустым, - это когда пользователь находится за прокси-сервером. Это похоже на то, что находится за брандмауэром, но немного отличается, поэтому я хотел упомянуть об этом ради полноты.
Ответ 4
Он также будет пустым, если новый черновик стандарта Referrer Policy используется для предотвращения отправки заголовка referer источнику запроса. Пример:
<meta name="referrer" content="none">
Хотя Chrome и Firefox уже реализовали проект версию Referrer политики, вы должны быть осторожны с ним, потому что, например Chrome не ожидает, что no-referrer
вместо none
(и я видел, и never
где - то).
Ответ 5
Я обнаружил, что реализация обозревателя браузера действительно противоречива.
Например, элемент привязки с атрибутом "загрузить" работает в Safari, как и ожидалось, и отправляет ссылку, но в Chrome ссылка будет пустой или "-" в журналах веб-сервера.
<a href="#" onclick="location.href='http://foo.com/foo'; return false;" download="bar">click to download</a>
В Chrome не работает - реферер не отправлен.