Переходя по ссылке, браузер сообщает целевому сайту, откуда пришёл посетитель, — в заголовке Referer (опечатка в названии живёт со времён первого стандарта). Заголовок Referrer-Policy управляет тем, сколько информации туда попадёт.
Referrer-Policy: strict-origin-when-cross-origin
Что может утечь
По умолчанию передаётся полный адрес страницы. Иногда в нём есть лишнее:
example.ru/admin/orders/4815— структура админки и номера заказов;example.ru/reset-password?token=abc123— одноразовый токен;example.ru/poisk?q=как+уволить+сотрудника— поисковый запрос посетителя;- внутренние адреса корпоративного портала.
Всё это уходит владельцу сайта, на который ведёт ссылка, и попадает в его логи и аналитику.
Значения
| Значение | Что передаётся |
|---|---|
no-referrer |
ничего |
origin |
только домен, без пути |
same-origin |
полный адрес своим страницам, чужим — ничего |
strict-origin |
домен; при переходе с HTTPS на HTTP — ничего |
strict-origin-when-cross-origin |
внутри сайта — полный адрес, наружу — только домен |
no-referrer-when-downgrade |
всё, кроме перехода с HTTPS на HTTP |
unsafe-url |
всегда полный адрес |
Что выбрать
strict-origin-when-cross-origin — разумный вариант почти для всех, и он же используется современными браузерами по умолчанию. Внутренняя аналитика получает полные пути, наружу уходит только имя домена.
Явно задать его всё равно стоит: значения по умолчанию у браузеров менялись и могут различаться в старых версиях.
no-referrer — для разделов с чувствительными данными: личный кабинет, медицинские сервисы, страницы восстановления доступа.
unsafe-url — не используйте.
Обратная сторона
Referer — источник данных о трафике. Если поставить no-referrer на весь сайт, партнёры перестанут видеть переходы от вас, а ваши ссылки в чужой аналитике сольются в «прямые заходы». Для сайта, участвующего в партнёрских программах, это осязаемая потеря.
Поэтому глобально — strict-origin-when-cross-origin, а no-referrer точечно, там где нужно.
Как настроить
Nginx:
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
Для отдельной ссылки политику можно переопределить прямо в разметке:
<a href="https://partner.ru" referrerpolicy="no-referrer">Ссылка без реферера</a>
Для одной страницы — мета-тегом:
<meta name="referrer" content="no-referrer">
Главное правило
Referrer-Policy — это гигиена, а не защита (настоящие ограничения для чужих скриптов задаёт CSP). Секретов в адресах страниц быть не должно в принципе: токены передаются в теле запроса или в заголовках, идентификаторы не должны раскрывать бизнес-данные. Заголовок лишь уменьшает ущерб, если что-то всё же попало в адрес.
Как проверить
- Пункт аудита «Referrer-Policy».
- Из консоли:
curl -I https://example.ru/ | grep -i referrer-policy