В каких случаях 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:

http://referer.us/

Автономный фильтр-прокси (spoof any header):

Privoxy

Подменю 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 не работает - реферер не отправлен.