Содержание
    01.09.2021

    Каждый, кто до 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;

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

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