Каждый, кто до 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 передаваться не будет.
Важно учитывать, что если сервер не возвращает данный заголовок, то браузеры по умолчанию будут использовать значение strict-origin-when-cross-origin для всех запросов.
Наиболее оптимальным значением заголовка 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 |
Данный заголовок может передавать как сам скрипт, если будет содержать код:
Также, данную настройку можно сделать на стороне веб-сервера nginx:
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
Проверить, работает ли отправка такого заголовка, можно с помощью инструмента Проверка заголовков.
Клиенты Хостинга Украина смогут активировать данный функционал в панели управления хостингом в разделе «Настройки сайта».
