В каких случаях HTTP_REFERER будет пустым

163

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

одного возраста
источник
8
Когда клиент не отправляет один.
Игнасио Васкес-Абрамс

Ответы:

277

Он будет / может быть пустым, когда конечный пользователь

  • ввел URL сайта в адресную строку браузера.
  • посетил сайт с помощью поддерживаемой браузером закладки.
  • посетил сайт в качестве первой страницы в окне / вкладке.
  • нажал на ссылку во внешнем приложении.
  • переключился с URL-адреса https на URL-адрес http.
  • переключился с URL-адреса https на другой URL-адрес https.
  • на нем установлено программное обеспечение безопасности (антивирус / брандмауэр / и т. д.), которое лишает реферера всех запросов.
  • находится за прокси, который лишает реферера всех запросов.
  • посещал сайт программно (вроде, curl ) без настройки заголовка реферера (поисковые роботы!).
BalusC
источник
32
Возможно, вы захотите добавить «когда пользователь переходит с защищенной (HTTPS) страницы на небезопасную».
Джон Пик
4
"посетил сайт в качестве первой страницы в окне / вкладке." Даже если это было, нажав на ссылку и открыв ее в новом окне / вкладке ?? Ты уверен? Это было бы очень неправильным поведением браузера
matteo
Также см. Здесь stackoverflow.com/questions/21922143/… для
исключения из
4
msgstr "переключен с URL-адреса https на другой URL-адрес https". вы уверены в этом? : \
Оскар Медерос
5
По умолчанию при переключении с URL-адреса HTTPS на другой URL-адрес HTTPS устанавливается полный реферер. Однако эта политика по умолчанию может быть переопределена. w3.org/TR/referrer-policy
Дхавал Капил
34

HTTP_REFERER - отправляется браузером с указанием последней страницы, просмотренной браузером!

Если вы доверяете [HTTP_REFERER] по какой-либо важной причине, вы не должны этого делать, поскольку ее легко подделать:

  1. Некоторые браузеры ограничивают доступ, чтобы запретить передачу HTTP_REFERER
  2. Введите адрес в адресной строке, не будет проходить HTTP_REFERER
  3. открыть новое окно браузера не будет передавать HTTP_REFERER, потому что HTTP_REFERER = NULL
  4. имеет некоторые аддоны браузера, которые блокируют его по соображениям конфиденциальности. Некоторые брандмауэры и AV делают.

Попробуйте это расширение Firefox, вы сможете установить любые заголовки, которые вы хотите:

@ Мастер праздника:

Fire Fox:

расширения: refspoof , refontrol , изменение заголовков , отсутствие реферера

Полностью отключить: опция доступна в 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:

Полностью отключите: « Настройки»> «Настройки»> «Дополнительно»> «Сеть» и снимите флажок «Отправить информацию о реферере».

Поддельный веб-сервис:

http://referer.us/

Автономный фильтрующий прокси (подделка любого заголовка):

Privoxy

Подмена http_referer при использовании wget

'--Referer = URL'

Подмена http_referer при использовании curl

-е, - реферер

Подмена http_referer с помощью 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)
Этот парень
источник
Tamper Data - еще одно расширение Firefox, на которое стоит обратить внимание, если вы хотите поиграть с изменением значений реферера.
Крис Хепнер
Я очень старался вспомнить его имя. но моя память предала меня. Спасибо :)
ThatGuy
@nix Some browsers limit access to not allow HTTP_REFERER to be passedНе могли бы вы назвать пример для такого браузера и / или расширения?
Мастер празднования
@MasterofCelebration добавил способы подделать http_referer в мой ответ.
ThatGuy
Не используйте referer.us, чтобы подделать / скрыть вашего реферера! Это не работает и утечка вашей информации. Единственный работающий сервис на данный момент - это бесплатный сервис скрытия ссылок .
Брайан Смит
9

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

Ночная Сова
источник
8

Он также будет пустым, если новый черновик стандарта Referrer Policy используется для предотвращения отправки заголовка referer источнику запроса. Пример:

<meta name="referrer" content="none">

Хотя Chrome и Firefox уже реализовали проект версию Referrer политики, вы должны быть осторожны с ним , потому что, например Chrome ожидает no-referrerвместо none(и я видел , и neverгде - то).

Джоэл Ричард
источник
таблица совместимости браузера: developer.mozilla.org/en-US/docs/Web/HTTP/Headers/…
djvg
0

Я обнаружил, что реализация обозревателя браузера действительно противоречива.

Например, элемент привязки с атрибутом «скачать» работает как положено в Safari и отправляет ссылку, но в Chrome ссылка будет пустой или «-» в журналах веб-сервера.

<a href="http://foo.com/foo" download="bar">click to download</a>

В Chrome не работает - реферер не отправлен.

jmoz
источник