INTEGRITY Документация

Взаимодействие cookie SameSite с Cloudflare

Google Chrome принудительно применяет поведение SameSite для cookie для защиты от маркетинговых cookie, отслеживающих пользователей, и от межсайтовой подделки запросов (CSRF), позволяющей злоумышленникам похищать ваши cookie или манипулировать ими.

SameSite у cookie имеет три режима:

SameSite настройки для Cookie Cloudflare включают:

Cookie Cloudflare Настройка SameSite HTTPS Only Partitioned (CHIPS)
__cf_bm SameSite=None; Secure Да Нет
cf_clearance SameSite=None; Secure Да Да
__cflb SameSite=Lax Нет Нет

Атрибут SameSite в cookie закрепления сессии

В настоящее время, чтобы настроить SameSite атрибут у cookie привязки сессии (session affinity) необходимо использовать Cloudflare API (например, Create Load Balancer ).

Чтобы настроить значение SameSite атрибут cookie, включите samesite и secure JSON-атрибуты в вашем HTTP-запросе, внутри session_affinity_attributes (объект).

Для этих двух атрибутов доступны следующие значения:

samesite (атрибут):

secure (атрибут):

Auto значение для samesite будет вести себя следующим образом:

Auto значение для secure будет вести себя следующим образом:

Если вы зададите samesite в None в API-запросе, вы не можете задать secure в Never.

Если вам требуется конкретный SameSite в cookie сессионной привязки (session affinity), Cloudflare рекомендует задать значения для samesite и secure, отличное от Auto, а не полагаться на поведение по умолчанию. Таким образом, значение SameSite атрибут cookie не изменится из-за изменений конфигурации (а именно Always Use HTTPS).


Известные проблемы с SameSite и cf_clearance cookie

Когда посетитель проходит челлендж, показанный из-за пользовательское правило или Правило IP Access, cf_clearance устанавливается в браузере посетителя. Cookie cf_clearance имеет время жизни по умолчанию 30 минут, которое можно настроить через Challenge Passage.

Cloudflare использует SameSite=None в cf_clearance (cookie), чтобы запросы посетителя с разных имён хостов не сталкивались затем с челленджами или ошибками. Когда SameSite=None используется, он должен быть установлен вместе с Secure флаг.

Использование Secure флаг требует отправки cookie по HTTPS-соединению. Если на какой-либо части вашего сайта используется HTTP, cf_clearance cookie по умолчанию использует SameSite=Lax, что может нарушить корректную работу вашего сайта.

Чтобы решить проблему, переведите трафик сайта на HTTPS. Cloudflare предлагает для этого две функции:


Партиционированные cookie (CHIPS) и cf_clearance

Cloudflare устанавливает Partitioned атрибут у cf_clearance (cookie) (и на внутреннем cf_chl_* cookie, используемые Challenge Platform) для соответствия Cookies Having Independent Partitioned State (CHIPS) ↗.

С CHIPS cookie, установленный в стороннем контексте (например, внутри iframe или из кросс-сайтового подресурса), хранится в разделе, привязанном к сайту верхнего уровня, а не разделяется между всеми сайтами, встраивающими эту третью сторону. В браузерах на базе Chromium, блокирующих сторонние cookie, это сохраняет состояние челленджа для кросс-сайтовых встраиваний, которые иначе были бы сломаны. В браузерах без поддержки CHIPS Partitioned игнорируется, и поведение не меняется.

Partitioned не применяется к __cf_bm.

Влияние на встроенные челленджи

Поскольку cf_clearance партиционирован, допуск (clearance), полученный в одном контексте верхнего уровня, не переиспользуется в другом контексте верхнего уровня. Посетитель, прошедший челлендж при прямом просмотре сайта, не перенесёт этот допуск автоматически на другой сайт, который его встраивает, и наоборот. Это ожидаемое поведение в рамках CHIPS.

Partitioned требует SameSite=None; Secure

Partitioned действует только для cookie, которые также установлены с SameSite=None; Secure. Если ваш сайт обслуживает не весь трафик по HTTPS, cf_clearance (cookie) в качестве запасного варианта использует SameSite=Lax (см. Известные проблемы с SameSite и cf_clearance cookie), а также Partitioned не действует.