Тема 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

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

Також, це налаштування можна зробити на стороні веб-сервера nginx:

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

Перевірити, чи працює відправка такого заголовка, можна за допомогою інструменту Перевірка заголовків.

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