В некоторых случаях Referer передается из HTTPS в HTTP… Как?

17

Теоретически браузеры не передают информацию реферера с HTTPS на HTTP-сайты. И по моему опыту это всегда было правдой. Но я только что нашел исключение, и я хочу понять, почему это работает, поэтому я тоже могу его использовать.

Выполните поиск по запросу «что такое мой реферер» на странице https://www.google.ca/,
например: https://www.google.ca/search?q=what+is+my+referer.

Есть несколько сайтов, которые покажет реферер. Кажется, что все они «работают», когда не должны. Например, нажмите на www.whatismyreferer.com. Я получил:

 Your referer:
 https://www.google.ca/

Обратите внимание, что иногда, редко, я получаю "нет реферера" в результате. Вернитесь и нажмите на ссылку еще раз, и она будет «работать» в следующий раз.

Этого не должно быть. www.whatismyreferer.com - не HTTPS-сайт. Заголовок реферера не должен передаваться, но это так.

Что здесь происходит, и как я могу сделать то же самое с моего сайта HTTPS на сайты HTTP, на которые я ссылаюсь?

ravisorg
источник
1
Я должен отметить, что я использую Chrome в Windows, если это имеет какое-то значение (например: если другие люди видят разные результаты в разных браузерах / ОС)
ravisorg
Такое поведение больше не соответствует действительности.
Flimm
@ravisorg, разве это не должно быть размещено на S / O вместо этого?
Пейсер
Google теперь возвращает ссылку HTTPS, поэтому тест больше не действителен :-(
Сайлас С. Браун

Ответы:

23

Похоже, это связано с новым <meta>заголовком, который использует Google:

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

Спецификация: https://w3c.github.io/webappsec-referrer-policy/

В настоящее время он полностью поддерживается только несколькими браузерами , так что это не полное решение, но, безусловно, начало!

ravisorg
источник
4

Это стандартное поведение.

https://tools.ietf.org/html/rfc2616#section-15.1.3 говорит

Клиенты НЕ ДОЛЖНЫ включать поле заголовка Referer в (незащищенный) HTTP-запрос, если ссылающаяся страница была передана по безопасному протоколу.

так что если ваш клиент делает это, он нарушает стандарт.

опять же, Google - это стандарт, и они могут делать все, что захотят :-)

johnshen64
источник
1
«Должен» означает необязательное право?
Pacerier
да, я бы так подумал, необязательно.
johnshen64
4
Поскольку это необязательно, почему вы говорите, что это нарушает стандарт?
Pacerier
1
К настоящему времени 2616 устарел. 7231 Раздел 5.5.2 гласит: «Пользовательский агент НЕ ДОЛЖЕН отправлять поле заголовка Referer в незащищенном HTTP-запросе, если ссылающаяся страница была получена по безопасному протоколу». Это не указывает, что агенты должны делать для защищенных HTTP-запросов.
Питер
1

Похоже, что это то, что делает JavaScript на странице Google. Я не вижу его в firefox с включенным noscript и перестаю видеть его в Chrome на Windows, если я отключаю javascript. Я не знаю, что конкретно, потому что я не вырыл глубже этого.

Этан Рейснер
источник
Нет, это не связано с javascript (я подумал об этом и проверил его, прежде чем спрашивать). Похоже, это новый тег <meta>, за которым следует Chrome.
Рависорг
Отключение JavaScript надежно препятствует работе реферера. Я не знаю. Может быть, здесь задействовано больше, чем одна вещь.
Этан Рейснер
Это очень интересно - я собираюсь поэкспериментировать с этим. Спасибо за ответ!
Рависорг
0

<meta> Имя атрибута метки имеет новые правила реферера, который ссылается на содержимое HTTP-заголовка реферера HTTP, присоединенного к любому запросу, отправленному из этого документа.

Для получения дополнительной информации, пожалуйста, проверьте здесь: RFC Политика реферера

leozhang2018
источник
Это так же, как уже принятый ответ ?!
DocRoot
-2

Это происходит потому, что когда вы нажимаете на ссылку, вы перенаправляетесь с https://www.google .... на http://www.google ..., а затем вы перенаправляетесь на www.whatismyreferer.com.

И, как вы сказали, между http-сайтом передается реферер.

Вы можете проверить это с расширением Firefox

user2299634
источник
2
Вы догадываетесь, или вы основываете это на факте? Потому что я не вижу, чтобы это случилось с моей стороны. Нажав на ссылку, вы отправляетесь на HTTPS-редирект на google.ca, а затем на конечный домен. Я никогда не перехожу на URL, не являющийся https, пока не достигну (например) www.whatismyreferer.com. Также обратите внимание, что реферер специально указывает httpS://www.google.ca , а не http.
Рависорг
Да, этот ответ кажется неправильным.
ceejayoz
Вот дамп заголовков http: pastebin.com/Y1HJyJ87 Я только что удалил загрузку ресурсов (например, Google предлагает и другие материалы AJAX) и данные, связанные с куки. Но я должен признать, что, когда я пытался несколько раз, Google вел себя по-другому ... Иногда, используя только https, поэтому веб-сайт не отображал мой реферер. Попробуйте сами
user2299634