В некоторых случаях 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, на которые я ссылаюсь?


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/

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


4

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

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

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

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

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


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 Политика реферера


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

-2

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

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

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


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

Да, этот ответ кажется неправильным.
ceejayoz

Вот дамп заголовков http: pastebin.com/Y1HJyJ87 Я только что удалил загрузку ресурсов (например, Google предлагает и другие материалы AJAX) и данные, связанные с куки. Но я должен признать, что, когда я пытался несколько раз, Google вел себя по-другому ... Иногда, используя только https, поэтому веб-сайт не отображал мой реферер. Попробуйте сами
user2299634
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.