Заголовок Referrer-Policy

Каждый, кто до 2013 года занимался анализом поисковых запросов, заметил, что раньше по полю Referer можно было узнать из какой поисковой системы и по какому ключевому слову производился поиск. При переходе на сайт в заголовке Referer передавался полный адрес страницы, с которой перешёл пользователь. Такой адрес содержал в себе параметр с ключевым словом, которое было введено в поисковик, например http://www.google.com.ua/search?hl=uk&q=хостинг украина&btnG=Пошук Google&meta=&aq=8. Но сейчас мы можем узнать лишь из какой поисковой системы пришёл посетитель, так как в поле Referer указывается только адрес поисковика, например https://www.google.com.

Каждый раз, когда вы переходите с одного сайта на другой, браузер добавляет заголовок Referer с адресом страницы, которую вы покидаете. Такой адрес может содержать информацию, которую не хотелось бы передавать, например токен восстановления пароля. Допустим, если перейти с сайта https://adm.tools/reset-password/?token=1FA5B622CDE на ukraine.com.ua, то на сайт ukraine.com.ua будет передан заголовок Referer, который будет содержать токен для сброса пароля. Для того чтобы избежать таких уязвимостей, существует заголовок Referrer-Policy, обеспечивающий безопасность.

Обратите внимание — заголовок Referer, содержащий название сайта, с которого перешёл посетитель, содержит одну букву r, в то время как заголовок Referrer-Policy содержит две rr.

Заголовок Referrer-Policy поддерживает следующие значения:

  • no-referrer — никогда не отправлять заголовок Referer.
  • same-origin — отправлять полный URL для запросов в пределах доменного имени и протокола. При переходе по сайту будет передаваться Referer с полным адресом. Полезно, когда вы на своём сайте отслеживаете движение посетителя.
  • origin — отправлять только доменное имя, в том числе и при переходе на HTTP-сайты. Если указать strict-origin, то при переходе на протокол HTTP ничего передаваться не будет.
  • origin-when-cross-origin — передавать полный URL в пределах сайта, а при переходе на другие сайты передавать только информацию о домене. Если указать strict-origin-when-cross-origin, то при переходе на протокол HTTP поле Referer передаваться не будет.

Наиболее оптимальным значением заголовка Referrer-policy является origin-when-cross-origin так как передача Referer в пределах сайта позволяет отслеживать движение посетителя и не угрожает безопасности. При переходе на другие сайты передается только домен, с которого был осуществлён переход.

Существует также несколько не имеющих особого смысла значений:

  • no-referrer-when-downgrade — отправлять заголовок всегда, когда не меняется протокол. То есть, заголовки передаются при переходе только в пределах HTTP или только в пределах HTTPS.
  • unsafe-url — всегда отправлять полный адрес сайта, с которого совершён переход. Можно просто не отправлять заголовок, и результат будет тот же.

Сравнительная таблица заголовков. Для примера мы находимся на сайте https://a.com/page.html и переходим на указанный сайт:

https://a.com/ http://a.com/ https://b.com/ http://b.com/
no-referrer NULL NULL NULL NULL
same-origin https://a.com/page.html NULL NULL NULL
origin https://a.com/ https://a.com/ https://a.com/ https://a.com/
strict-origin https://a.com/ NULL https://a.com/ NULL
origin-when-cross-origin https://a.com/page.html https://a.com/ https://a.com/ https://a.com/
strict-origin-when-cross-origin https://a.com/page.html NULL https://a.com/ NULL
no-referrer-when-downgrade https://a.com/page.html NULL https://a.com/page.html NULL
unsafe-url https://a.com/page.html https://a.com/page.html https://a.com/page.html https://a.com/page.html

Данный заголовок может передавать как сам скрипт, если будет содержать код:

<?php
header('Referrer-policy: strict-origin-when-cross-origin');
?>

Также, данную настройку можно сделать на стороне веб-сервера nginx:

add_header Referrer-Policy "strict-origin-when-cross-origin" always;

Проверить, работает ли отправка такого заголовка, можно с помощью инструмента Проверка заголовков.

Клиенты Хостинга Украина смогут активировать данный функционал в панели управления хостингом в разделе «Настройки сайта».