Начиная с Chrome 135, вы можете использовать новое значение sandbox
: allow-same-site-none-cookies
. Если эта политика указана и сторонние файлы cookie недоступны, браузер будет отправлять только файлы cookie SameSite=None
в HTTP-запросах, исходящих из собственных изолированных iframe.
Что такое изолированный iframe?
Песочница iframes — это iframes с особыми ограничениями. Они рассматриваются как имеющие null
, непрозрачное происхождение. По умолчанию потенциально опасные функции, такие как скрипты, формы и всплывающие окна, недоступны в песочнице iframes.
Используйте атрибут sandbox
, чтобы указать , какие функции должен иметь iframe в песочнице. Например:
<iframe sandbox="allow-scripts" src="example-sandboxed-frame.html"/>
Использование «песочницы» всегда является хорошей идеей, поскольку она позволяет детально выбирать разрешения, необходимые для успешной загрузки встроенного контента, одновременно ограничивая область потенциальных эксплойтов.
Зачем нам нужна эта новая политика?
До введения allow-same-site-none-cookies
вы могли настроить два сценария использования cookie-файлов в изолированном iframe:
- Без токена
allow-same-origin
в атрибутеsandbox
источник iframe сериализуется какnull
, делая все запросы с изолированной страницы кросс-сайтовыми. В этом случае в запросы будут включены только файлы cookie сSameSite=None
. - При наличии токена
allow-same-origin
в атрибутеsandbox
запросы обрабатываются как исходящие из реального источника iframe, что позволяет отправлять файлы cookie с любым значениемSameSite
.
Если сторонние файлы cookie заблокированы, изолированный iframe, в котором отсутствует allow-same-origin
не сможет отправлять файлы cookie, если вы не включите allow-same-site-none-cookies
.
Iframe с allow-same-origin
по-прежнему сможет включать файлы cookie в запросы на тот же сайт, даже если сторонние файлы cookie заблокированы. Однако весь файл cookie источника будет подвержен потенциально вредоносной веб-активности.
При использовании allow-same-site-none-cookies
iframe может отправлять файлы cookie SameSite=None
в HTTP-запросах, в то время как потенциально конфиденциальные файлы cookie SameSite=Strict
и SameSite=Lax
не будут включены.
Практический пример
Рассмотрим сайт practice-coding.example
, который позволяет пользователям создавать и запускать собственные проекты кодирования и встраивать код других пользователей. Чтобы использовать сервис, пользователи должны войти в систему, в результате чего будет установлен сеансовый cookie SameSite=Strict
.
Другой пользователь создает проект practice-coding.example/cookie-theft
, который другие пользователи могут неосознанно встраивать в свои проекты как iframe. Если файлы cookie SameSite=Strict
и SameSite=Lax
подвергаются воздействию iframe practice-coding.example/cookie-theft
, злоумышленник может украсть сеансовые файлы cookie других пользователей.
В этом сценарии владелец сайта может захотеть ограничить доступ к потенциально конфиденциальным файлам cookie. Однако он может по-прежнему захотеть разрешить файлы cookie SameSite=None
в изолированных iframe. Например, для изолированного iframe practice-coding.example/coding-interview
могут потребоваться файлы cookie SameSite=None
, чтобы кандидаты могли повторно просмотреть свой код. allow-same-site-none-cookies
предотвращает раскрытие всего файла cookie, выборочно разрешая необходимые файлы cookie SameSite=None
.
Как разрешить только SameSite=None
внутри изолированных фреймов первой стороны?
Чтобы включить файлы cookie SameSite=None
в запросах от страниц-песочниц первой стороны, укажите токен allow-same-site-none-cookies
в теге iframe. Например:
<iframe sandbox="allow-same-site-none-cookies" src="example-sandboxed-page.html"/>
Вы также можете установить политику allow-same-site-none-cookies
с помощью HTTP-заголовка Content-Security-Policy
:
Content-Security-Policy: sandbox allow-same-site-none-cookies;
Попробуйте сами с нашей демоверсией .
Привлекайте и делитесь отзывами
Сообщите о проблеме , чтобы поделиться отзывом или сообщить о проблемах, или присоединитесь к обсуждению на GitHub.