2011-02-17 3 views
34

У меня есть страница, на которой я не хочу, чтобы исходящие ссылки отправляли реферер, чтобы сайт назначения не знал, откуда они пришли.Остановить ссылку от отправки реферера до адресата

Я предполагаю, что это невозможно, но я просто хочу убедиться, что не было никакой скрытой магии javascript, которая могла бы это сделать, и это будет работать с некоторыми (если не большинством) браузерами.

Возможно, какой-то умный код статуса HTTP перенаправляет кунг-фу?

Нечто подобное было бы идеально

<a href="example.com" send_referrer="false">link</a> 

ответ

4

Я тоже пытался понять это.

Решение, о котором я думал, это использовать URL-адрес данных, чтобы скрыть фактическую страницу, с которой я иду.

<a href='data:text/html;charset=utf-8, <html><script>window.location = "http://google.ca";</script></html>'>Link</a> 

Эта страница содержит только страницу, которая содержит только javascript для загрузки другой страницы. В моем тестировании рефериру не передается конечный пункт назначения. Я не знаю, что он мог бы отправить в качестве реферера, если бы попытался в любом случае, может быть, URL-адрес данных? который не выдавал бы, откуда вы пришли.

Это работает в Chrome. Chrome - моя единственная забота о моей текущей проблеме, но для браузеров, которые не любят javascript на страницах, которые являются URL-адресами данных. Вероятно, вы могли бы попробовать мета-обновление.

+0

Работы в хромированном состоянии. К сожалению, не в firefox. – zaius

8

Bigmack находится на правильном пути, но изменение местоположения в javascript по-прежнему отправляет реферер в firefox. Использование мета-обновления, похоже, решает проблему для меня.

<a href='data:text/html;charset=utf-8, <html><meta http-equiv="refresh" content="0;URL=&#39;http://google.com/&#39;"></html>'>Link</a> 
+0

Я считаю, что это то, что Google делает для ссылок в gmail - вы щелкаете по ссылке и переходите на пустую страницу отслеживания Google с обновлением мета-ссылки на исходную ссылку, которую вы нажали. – wezell

25

HTML 5 включает в себя rel="noreferrer", который является supported in all major browsers. Так что для этих браузеров, вы можете просто написать:

<a href="example.com" rel="noreferrer">link</a> 

Там также прокладка для других браузеров: https://github.com/knu/noreferrer

+4

Головки этой прокладки зависят от $ .browser, который устарел. –

34

Для тех, кто посещает в 2015 году и в последующий период, теперь есть надлежащее решение, получающее поддержку.

HTTP-Referrer Policy спецификации позволяет управлять ссылающейся отправки ссылки и subresources (изображения, скрипты, таблицы стилей и т.д.) и, на данный момент, это supported на Firefox, Chrome и Opera.

<meta name="referrer" content="no-referrer"> 

(И старая версия спецификации поддерживается Microsoft Край и Safari, но я до сих пор не нашел протестированный рабочий способ накормить их старый синтаксис во время кормления все еще новый синтаксиса.)

Кроме того, если вы хотите, чтобы применить его к audio, img, link, script и video тегам ссылающихся ресурсов, которые требуют CORS, не забудьте также установить атрибут crossorigin="anonymous" на них так, только абсолютный минимум (Origin) будет использоваться совместно.

(Вы не можете избавиться от заголовка Origin при использовании CORS, так как удаленные сайты должны знать, что домен делает запрос для того, чтобы разрешить или запретить его.)

+0

Примечание: Chrome дает эту ошибку: 'Не удалось установить политику referrer: значение 'none' не является одним из 'always', 'default', 'never', 'no-referrer', 'no-referrer-when-downgrade ',' origin ',' origin-when-crossorigin 'или' unsafe-url '. Политика реферирования этого документа осталась без изменений. «Указанная« none »vaue кажется неправильной. –

+1

@ TomPažourek Спасибо. Я думаю, что это старый синтаксис. Не знаю, как я это использовал. – ssokolow

+0

Есть еще некоторые браузеры, которые передают референт с предложенным метатегом. Есть ли лучший способ прекратить отправку реферера в ЛЮБОЙ браузер? Помогло бы использование «noopener»? – Alex

0

В дополнение к информации, уже предоставлена. Здесь вы найдете дополнительную информацию по этой теме: https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-no-referrer

В частности, вы можете отправлять или не отправлять реферальную информацию, если вам нужны разные правила для запросов одного происхождения или кросс-происхождения.

Что-то нужно учитывать в зависимости от конкретного случая использования. т. е. если вы потянете изображения/css/javascript с сторонних веб-сайтов, то вам может не понадобиться идентифицировать URL-адрес, из которого вы это делаете, и, следовательно, использовать опцию no-referrer. Если вы подключаетесь к другим сайтам с вашего собственного сайта, вы можете захотеть, чтобы они знали, что вы отправляете им трафик. Всегда думайте о последствиях этого с обеих сторон. Если есть конфликт в этих двух областях, тогда есть другие варианты, такие как добавление параметров отслеживания UTM в конец URL-адресов, которые могут оказаться полезными для некоторых людей. Полная информация здесь: https://www.contradodigital.com/2014/06/03/importance-utm-tracking-parameters-social-media/

Смежные вопросы