Новое значение sandbox allow-same-site-none-cookies из Chrome 135

Наталья Маркобородова
Natalia Markoborodova

Начиная с 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.