Безопасность и домен 2 мин чтения

Referrer-Policy — что уходит вместе с переходом

Какой адрес вашего сайта видит сторонний сервис, когда посетитель уходит по ссылке. Вопрос приватности и утечки внутренних адресов.

Переходя по ссылке, браузер сообщает целевому сайту, откуда пришёл посетитель, — в заголовке 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

А что с этим на вашем сайте?

Аудит «Кверху» проверяет этот пункт вместе с остальными пятьюдесятью и показывает конкретику: какие страницы затронуты и что именно исправить. Первая полная проверка проекта — бесплатно.

Проверить сайт бесплатно