Лучшие практики реферальной политики и реферальной политики

Оптимизируйте свои подборки Сохраняйте и классифицируйте контент в соответствии со своими настройками.

Maud Nalpas

На этой странице описаны некоторые рекомендации по настройке политики реферера и использованию реферера во входящих запросах.

Краткое содержание

Реферер и реферальная политика 101

HTTP-запросы могут включать дополнительный заголовок Referer , который указывает URL-адрес источника или веб-страницы, с которой был сделан запрос. Заголовок Referrer-Policy определяет, какие данные доступны в заголовке Referer .

В следующем примере заголовок Referer включает полный URL site-one с которой был сделан запрос.

HTTP-запрос, включая заголовок Referer.

Заголовок Referer может присутствовать в различных типах запросов:

Для навигации и iframe вы также можете получить доступ к этим данным с помощью JavaScript, используя document.referrer .

Вы можете многому научиться на значениях Referer . Например, служба аналитики может использовать их, чтобы определить, что 50 % посетителей site-two.example пришли из social-network.example . Но когда полный URL-адрес, включая путь и строку запроса, отправляется в Referer через источник , это может поставить под угрозу конфиденциальность пользователя и создать угрозу безопасности:

URL-адреса с путями, сопоставленными с различными рисками конфиденциальности и безопасности.

URL-адреса с 1 по 5 содержат личную информацию, а иногда и конфиденциальную или идентифицирующую информацию. Негласная утечка этих данных из разных источников может поставить под угрозу конфиденциальность веб-пользователей.

URL №6 — это URL-адрес возможности . Если это сообщение получит кто-либо, кроме предполагаемого пользователя, злоумышленник может получить контроль над учетной записью этого пользователя.

Чтобы ограничить доступ к данным реферера для запросов с вашего сайта, вы можете установить политику реферера.

Какие политики доступны и чем они отличаются?

Вы можете выбрать одну из восьми политик. В зависимости от политики данные, доступные из заголовка Referer (и document.referrer ), могут быть:

Данные, которые могут содержаться в заголовке Referer и document.referrer.

Некоторые политики разработаны так, чтобы вести себя по-разному в зависимости от контекста : запроса между разными источниками или одного и того же источника, независимо от того, является ли пункт назначения запроса таким же безопасным, как источник, или и то, и другое. Это полезно для ограничения объема информации, передаваемой между источниками или менее безопасными источниками, сохраняя при этом богатство реферера на вашем собственном сайте.

В следующей таблице показано, как политики реферера ограничивают данные URL-адреса, доступные из заголовка Referer и document.referrer :

Область действия политики Название политики Референт: Нет данных Реферер: только Origin Референт: Полный URL-адрес
Не учитывает контекст запроса no-referrer проверять
origin проверять
unsafe-url проверять
Ориентирован на безопасность strict-origin Запрос с HTTPS на HTTP Запрос с HTTPS на HTTPS
или HTTP на HTTP
no-referrer-when-downgrade Запрос с HTTPS на HTTP Запрос с HTTPS на HTTPS
или HTTP на HTTP
Конфиденциальность origin-when-cross-origin Запрос между источниками Запрос того же происхождения
same-origin Запрос между источниками Запрос того же происхождения
Конфиденциальность и безопасность strict-origin-when-cross-origin Запрос с HTTPS на HTTP Запрос между источниками
с HTTPS на HTTPS
или HTTP на HTTP
Запрос того же происхождения

Вот некоторые вещи, которые следует учитывать при настройке политики реферера:

Политики рефералов по умолчанию в браузерах

По состоянию на октябрь 2021 г.

Если политика реферера не установлена, браузер использует политику по умолчанию.

Браузер Referrer-Policy по умолчанию
Хром По умолчанию используется strict-origin-when-cross-origin .
Firefox По умолчанию используется strict-origin-when-cross-origin .
Начиная с версии 93 , для пользователей строгой защиты от отслеживания и приватного просмотра менее строгие политики реферера no-referrer-when-downgrade , origin-when-cross-origin и unsafe-url игнорируются для межсайтовых запросов, то есть реферер всегда обрезается для межсайтовых запросов, независимо от политики веб-сайта.
Край По умолчанию используется strict-origin-when-cross-origin .
Сафари Значение по умолчанию похоже на strict-origin-when-cross-origin с некоторыми специфическими отличиями. Подробности см. в разделе «Предотвращение отслеживания» .

Рекомендации по настройке политики рефералов

Цель : явно установить политику повышения конфиденциальности, например strict-origin-when-cross-origin (или более строгую).

Существуют различные способы установки политики рефералов для вашего сайта:

Вы можете установить разные политики для разных страниц, запросов или элементов.

HTTP-заголовок и мета-элемент находятся на уровне страницы. Приоритетный порядок определения эффективной политики элемента следующий:

  1. Политика на уровне элемента
  2. Политика на уровне страницы
  3. Браузер по умолчанию

Пример:

  

Изображение запрашивается с использованием политики no-referrer-when-downgrade , а все остальные запросы подресурсов с этой страницы следуют политике strict-origin-when-cross-origin .

Как посмотреть политику рефералов?

Securityheaders.com удобен для определения того, какую политику использует конкретный сайт или страница.

Вы также можете использовать инструменты разработчика в Chrome, Edge или Firefox, чтобы просмотреть политику реферера, используемую для конкретного запроса. На момент написания этой статьи Safari не отображает заголовок Referrer-Policy , но показывает отправленный Referer .

Снимок экрана панели «Сеть» Chrome DevTools, показывающий Referer и Referrer-Policy.

Какую политику следует установить для своего веб-сайта?

Мы настоятельно рекомендуем явно установить политику повышения конфиденциальности, например strict-origin-when-cross-origin (или более строгую).

Почему «явно»?

Если вы не установите политику реферера, будет использоваться политика браузера по умолчанию — фактически веб-сайты часто подчиняются политике браузера по умолчанию. Но это не идеально, потому что:

Почему strict-origin-when-cross-origin (или более строгое)?

Вам нужна безопасная, повышающая конфиденциальность и полезная политика. Что означает «полезный» зависит от того, чего вы хотите от реферера:

Все это означает, что strict-origin-when-cross-origin как правило, является разумным выбором.

Пример: установка политики strict-origin-when-cross-origin

Или на стороне сервера, например в Express:

const helmet = require('helmet'); app.use(helmet.referrerPolicy()); 

Что, если strict-origin-when-cross-origin (или более строгое) не подходит для всех ваших вариантов использования?

В этом случае примените прогрессивный подход : установите для своего веб-сайта защитную политику, такую ​​как strict-origin-when-cross-origin и, если необходимо, более либеральную политику для конкретных запросов или элементов HTML.

Пример: политика на уровне элемента

Safari/WebKit может ограничивать document.referrer или заголовок Referer для межсайтовых запросов. Смотрите подробности .

Пример: политика уровня запроса

fetch(url, ); 

Что еще следует учитывать?

Ваша политика должна зависеть от вашего веб-сайта и вариантов использования, определенных вами, вашей командой и вашей компанией. Если некоторые URL-адреса содержат идентифицирующие или конфиденциальные данные, установите защитную политику.

Предупреждение. Данные, которые могут показаться вам не конфиденциальными, могут быть конфиденциальными для ваших пользователей или просто не являться данными, которые им нужны или которые ожидают незаметной утечки из перекрестного происхождения.

Рекомендации по обработке входящих запросов

Вот несколько рекомендаций, что делать, если ваш сайт использует URL-адрес реферера входящих запросов.

Защитите данные пользователей

Referer может содержать частные, персональные или идентифицирующие данные, поэтому обязательно относитесь к ним соответствующим образом.

Входящие рефереры могут измениться

Использование реферера из входящих запросов между источниками имеет несколько ограничений:

Альтернативы Referer

Возможно, вам придется рассмотреть альтернативы, если:

Чтобы определить альтернативы, сначала проанализируйте, какую часть реферера вы используете.

Если вам нужен только источник

Если вам нужны другие элементы URL-адреса (путь, параметры запроса…)

Если вы не можете использовать эти альтернативы: