← Документация WAF / troubleshooting
Взаимодействие cookie SameSite с Cloudflare
Google Chrome принудительно применяет поведение SameSite для cookie ↗ для защиты от маркетинговых cookie, отслеживающих пользователей, и от межсайтовой подделки запросов (CSRF), позволяющей злоумышленникам похищать ваши cookie или манипулировать ими.
SameSite у cookie имеет три режима:
- Strict: cookie создаются первой стороной (посещаемым доменом). Например, first-party cookie устанавливается Cloudflare при посещении
cloudflare.com. - Lax: cookie отправляются только на apex — домен (например,
example.com). Например, если кто-то (blog.example.net) вставил прямую ссылку (hotlink) на изображение (img.example.com/bar.png), клиент не отправляет cookie наimg.example.comпоскольку это ни first-party, ни apex-контекст. - None: 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 (атрибут):
- Допустимые значения:
Auto(по умолчанию),Lax,None,Strict.
secure (атрибут):
- Допустимые значения:
Auto(по умолчанию),Always,Never.
Auto значение для samesite будет вести себя следующим образом:
- Если Always Use HTTPS включена, cookie закрепления сессии будут использовать
Laxрежим SameSite. - Если Always Use HTTPS отключено, cookie session affinity будут использовать
Noneрежим SameSite.
Auto значение для secure будет вести себя следующим образом:
- Если Always Use HTTPS включена, cookie закрепления сессии (session affinity) будут содержать
Secureв атрибуте SameSite. - Если Always Use HTTPS отключено, cookie session affinity не будут включать
Secureв атрибуте SameSite.
Если вы зададите 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 не действует.