Knowledge Base
Cross-Origin Isolation: COEP, COOP, CORP
Cross-Origin Isolation Headers (COEP, COOP, CORP)
Категория: HTTP Security · Риск: medium
Cross-Origin Isolation Headers (COEP, COOP, CORP)
Зачем нужна изоляция cross-origin
После атак Spectre/Meltdown (2018) выяснилось, что JavaScript-код на странице может считывать данные из других вкладок или iframe через side-channel атаки на CPU-кеш. Браузеры ввели три новых заголовка для изоляции контекста выполнения.
Cross-Origin-Embedder-Policy (COEP)
Запрещает загрузку cross-origin ресурсов без явного разрешения.
Cross-Origin-Embedder-Policy: require-corp
**Что блокирует**: загрузку изображений, скриптов, шрифтов с других доменов без заголовка `Cross-Origin-Resource-Policy: cross-origin`.
# nginx
add_header Cross-Origin-Embedder-Policy "require-corp" always;
Cross-Origin-Opener-Policy (COOP)
Изолирует контекст просмотра от других окон/вкладок.
Cross-Origin-Opener-Policy: same-origin
| Значение | Поведение | |----------|-----------| | `same-origin` | Полная изоляция — только same-origin может использовать `window.opener` | | `same-origin-allow-popups` | Разрешает попапы с same-origin | | `unsafe-none` | Без защиты (по умолчанию) |
add_header Cross-Origin-Opener-Policy "same-origin" always;
Cross-Origin-Resource-Policy (CORP)
Контролирует, кто может загружать ресурс вашего сервера.
Cross-Origin-Resource-Policy: same-site
| Значение | Кто может загрузить | |----------|-------------------| | `same-origin` | Только точно тот же origin | | `same-site` | Тот же домен (включая поддомены) | | `cross-origin` | Любой сайт |
# Для API-ответов
add_header Cross-Origin-Resource-Policy "same-site" always;
Полная конфигурация для изолированного приложения
server {
# ...
# Изоляция от Spectre
add_header Cross-Origin-Opener-Policy "same-origin" always;
add_header Cross-Origin-Embedder-Policy "require-corp" always;
add_header Cross-Origin-Resource-Policy "same-site" always;
# Активируется SharedArrayBuffer и высокоточные таймеры
# (нужны для Web Workers, WASM threads)
}
Совместимость и ограничения
- COEP `require-corp` **ломает** загрузку контента с CDN, Google Fonts, сторонних виджетов если они не добавили `Cross-Origin-Resource-Policy: cross-origin`
- Проверьте через `cross-origin-embedder-policy: report-only` перед включением
- Поддержка: Chrome 83+, Firefox 79+, Safari 15.2+
Когда точно нужно
- Приложения, использующие `SharedArrayBuffer` (WASM threads, JavaScript thread pools)
- Сайты с высокими требованиями к изоляции (финансы, здравоохранение)
- После включения COEP+COOP `crossOriginIsolated === true` → доступны высокоточные таймеры
Связанные проверки
- [Content Security Policy](/kb/http/content-security-policy)
- [X-Frame-Options](/kb/http/x-frame-options-clickjacking)