Руководство по включению межсайтовой изоляции
Межсайтовая изоляция позволяет использовать на веб-странице такие мощные функции, как SharedArrayBuffer. В этой статье объясняется, как включить межсайтовую изоляцию на сайте.
В этом руководстве показано, как включить межсайтовую изоляцию, которая необходима для использования SharedArrayBuffer, performance.measureUserAgentSpecificMemory() и высокоточного таймера.
Прежде чем включать межсайтовую изоляцию, оцените, как она повлияет на рекламные места и другие межсайтовые ресурсы на вашем сайте.
Определите, где на вашем сайте используется функция SharedArrayBuffer
Начиная с версии Chrome 92, функции, использующие SharedArrayBuffer, больше не смогут работать без межсайтовой изоляции. Если вы попали на эту страницу из-за сообщения о нежелательности использования SharedArrayBuffer, то, вероятно, сайт или один из встроенных в него ресурсов использует SharedArrayBuffer. Чтобы не нарушить работу компонентов сайта, сначала определите, где именно применяется эта функция.
SharedArrayBuffer, больше не смогут работать без межсайтовой изоляции. Если вы попали на эту страницу из-за сообщения о нежелательности использования SharedArrayBuffer, то, вероятно, сайт или один из встроенных в него ресурсов использует SharedArrayBuffer. Чтобы не нарушить работу компонентов сайта, сначала определите, где именно применяется эта функция.Если вы не знаете точно, где на сайте используется SharedArrayBuffer, воспользуйтесь одним из двух способов:
- примените Chrome DevTools;
- (дополнительно) соберите отчеты о нежелательных функциях.
Если вы уже точно знаете, где используется SharedArrayBuffer, перейдите к разделу «Анализ влияния межсайтовой изоляции».
Chrome DevTools #
С помощью Chrome DevTools можно проверить качество кода на сайте.
- Откройте Chrome DevTools на странице, где может использоваться
SharedArrayBuffer. - Выберите панель Console (Консоль).
- Если на странице используется
SharedArrayBuffer, то отобразится следующее сообщение:[Deprecation] SharedArrayBuffer will require cross-origin isolation as of M92, around May 2021. See https://developer.chrome.com/blog/enabling-shared-array-buffer/ for more details. common-bundle.js:535 - Имя файла и номер строки в конце сообщения (например,
common-bundle.js:535) указывают на источник происхожденияSharedArrayBuffer. Если это сторонняя библиотека, попросите ее разработчика устранить проблему. Если же это часть кода вашего сайта, включите межсайтовую изоляцию, как указано ниже.
(Дополнительно) Отчеты о нежелательных функциях #
В некоторых браузерах есть функция отчетности о нежелательных API на маршруте до указанной конечной точки.
- Настройте сервер отчетов о нежелательных функциях и получите URL-адрес отчета. Это можно сделать с помощью общедоступной службы или самостоятельно.
- Используя полученный URL-адрес, установите следующий HTTP-заголовок для страниц, на которых может применяться
SharedArrayBuffer.Report-To: {"group":"default","max_age":86400,"endpoints":[{"url":"THE_DEPRECATION_ENDPOINT_URL"}]} - Как только заголовок начнет передаваться дальше, конечная точка, которую вы зарегистрировали, станет собирать отчеты о нежелательных функциях.
Пример реализации приведен здесь: https://cross-origin-isolation.glitch.me.
Анализ влияния межсайтовой изоляции #
Правда было бы здорово оценивать влияние межсайтовой изоляции, не нарушая работу сайта? Именно это позволяют сделать HTTP-заголовки Cross-Origin-Opener-Policy-Report-Only и Cross-Origin-Embedder-Policy-Report-Only.
- Задайте заголовок
Cross-Origin-Opener-Policy-Report-Only: same-originв документе верхнего уровня. Как следует из названия, этот заголовок только лишь отправляет отчеты о влиянии, котороеCOOP: same-originможет оказать на сайт, но не отключает связь с всплывающими окнами. - Настройте функцию отчетности и веб-сервер для получения и сохранения отчетов.
- Задайте заголовок
Cross-Origin-Embedder-Policy-Report-Only: require-corpв документе верхнего уровня. Именно этот заголовок позволяет, не нарушая работу сайта, проследить, как включениеCOEP: require-corpповлияет на него. Вы можете настроить этот заголовок для отправки отчетов на тот же сервер отчетов, который настроили на предыдущем шаге.
Снижение влияния межсайтовой изоляции #
Если вы уже определили, какие ресурсы затронет межсайтовая изоляция, придерживайтесь следующих общих рекомендаций о том, как решить проблему с этими ресурсами:
- Для таких межсайтовых ресурсов, как изображения, скрипты, таблицы стилей, блоки iframe и другие, задайте заголовок
Cross-Origin-Resource-Policy: cross-origin. Для локальных ресурсов сайта установите заголовокCross-Origin-Resource-Policy: same-site. - Добавьте атрибут
crossoriginв тег HTML документа верхнего уровня, если ресурс загружается с помощью CORS (пример:<img src="example.jpg" crossorigin>). - Если межсайтовые ресурсы, загруженные в блоки iframe, включают в себя еще один уровень блоков iframe, то рекурсивно выполните действия, описанные в этом разделе, прежде чем двигаться дальше.
- Убедившись, что все межсайтовые ресурсы имеют разрешение на загрузку, установите заголовок
Cross-Origin-Embedder-Policy: require-corpдля межсайтовых ресурсов, которые загружаются в блоки iframe. - Убедитесь в отсутствии межсайтовых всплывающих окон, использующих функцию
postMessage(). После включения межсайтовой изоляции они точно перестанут работать. Переместите эту функциональность в другой документ, на который не действует межсайтовая изоляция, или используйте другой способ передачи данных (например, HTTP-запросы).
Включение межсайтовой изоляции #
Если вы уже определили, как снизить влияние межсайтовой изоляции, придерживайтесь следующих общих рекомендаций о том, как включить межсайтовую изоляцию:
- Задайте заголовок
Cross-Origin-Opener-Policy: same-originв документе верхнего уровня. Если ранее вы уже задали заголовокCross-Origin-Opener-Policy-Report-Only: same-origin, замените его. Это заблокирует обмен данными между документом верхнего уровня и его всплывающими окнами. - Задайте заголовок
Cross-Origin-Embedder-Policy: require-corpв документе верхнего уровня. Если ранее вы уже задали заголовокCross-Origin-Embedder-Policy-Report-Only: require-corp, замените его. Это заблокирует загрузку межсайтовых ресурсов, не имеющих явного разрешения на загрузку. - Убедитесь, что
self.crossOriginIsolatedвозвращаетtrueв консоли—это означает, что на странице включена межсайтовая изоляция.
Ресурсы #
- Как изолировать сайт от других источников с помощью COOP и COEP
- Обновления, связанные с SharedArrayBuffer, в версиях Chrome 88 для Android и Chrome 92 для ПК