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)
}

Совместимость и ограничения

Когда точно нужно

Связанные проверки