Defaults.Exposed

Defaults.ExposedВиправлення › Cross-origin isolation headers (COOP / CORP / COEP)

Як виправити Cross-origin isolation headers (COOP / CORP / COEP)

Три необов'язкові інструкції браузера, що контролюють, як іншим сайтам дозволено взаємодіяти з вашим — відкривати його у спливних вікнах, вбудовувати його зображення та скрипти або завантажувати його ресурси на свої сторінки. Це сучасне посилення, а не базовий обов'язок, і за нашою оцінкою вони є інформаційними: їхня відсутність не знижує вашу оцінку. Але два безпечних з них закривають тихий фішинг у спливних вікнах і крадіжку пропускної здатності, і уважна IT-команда покупця помітить, коли вони присутні.

Висновок для вашого бізнесу: Два з цих трьох заголовків зупиняють складний фішинг у спливних вікнах і зупиняють інші сайти від hotlinking ваших зображень і скриптів (що коштує вам пропускної здатності та може витікати дані). Вони безкоштовні, займають у розробника близько 15 хвилин і нічого не зламають. Третій є просунутим і може зламати аналітику, шрифти та вбудовані елементи — більшість компаній повинні залишити його вимкненим. Жоден з них не впливає на вашу оцінку, тому ставтеся до них як до полірування, а не паніки: зробіть два безпечних, пропустіть ризикований, якщо він вам конкретно не потрібен.

Що це може вам коштувати

Чому це важливо. Це перспективні заголовки посилення браузера. За нашою методологією всі три є інформаційними — вони зареєстровані з нульовими балами і ніколи не переміщують вашу оцінку — бо вони є просунутими засобами управління, без яких сайт може законно працювати, і один з них може завдати шкоди при неправильному застосуванні. Ми повідомляємо про них, щоб ви бачили, де стоїте. Два безпечних (COOP і CORP) справді варті додавання: безкоштовні, швидкі, і вони закривають реальні прогалини фішингу у спливних вікнах і крадіжки ресурсів, нічого не ламаючи.

Що це таке — простими словами

Коли хтось відвідує ваш сайт, їхній браузер не просто завантажує ваші сторінки ізольовано — він також вирішує, як іншим сайтам дозволено взаємодіяти з вашим. Чи може інший сайт відкрити ваш у спливному вікні і тримати над ним контроль? Чи може інший сайт простягнутись і вбудувати ваші зображення та скрипти у свої власні сторінки? Чи може ваш власний сайт безпечно використовувати певні потужні, заблоковані функції браузера?

Ці три заголовки — короткі, невидимі інструкції, які ваш сайт надсилає браузеру кожного відвідувача, щоб відповісти саме на ці питання. Вони відомі своїми ініціалами:

Два з них (COOP і CORP) є безпечними для додавання і справді корисними. Третій (COEP) є просунутим і може зламати речі, якщо вмикати необережно.

Найважливіше знати заздалегідь: за нашою оцінкою всі три є інформаційними. Вони не впливають на вашу оцінку. Відсутній нічого вам не коштує. Ми повідомляємо про них, щоб ви бачили, де стоїте, і прибрали легкі перемоги — а не щоб ви панікували щодо числа.

Що це може коштувати вам

Це нішеві ризики, а не заголовні — але вони реальні, і виправлення безкоштовне.

Що насправді є кожне

COOP — Cross-Origin-Opener-Policy (безпечний, рекомендований)

Коли інший сайт відкриває ваш через спливне вікно або window.open, два вікна можуть зазвичай тримати посилання одне на одне. Цим зв’язком можна зловживати: відкривач може маніпулювати або перенаправляти ваше вікно, читати фрагменти його URL і влаштовувати переконливий фішинг, використовуючи ваш справжній домен. COOP: same-origin розриває цей зв’язок — ваше вікно стає ізольованим від будь-чого, що відкрило його через походження. Нормальний перегляд, ваші власні внутрішні посилання та звичайна навігація повністю не зачіпаються.

Як виглядає «добре»: Cross-Origin-Opener-Policy: same-origin.

CORP — Cross-Origin-Resource-Policy (безпечний, рекомендований)

За замовчуванням ваші зображення, скрипти та інші файли можуть бути вбудовані будь-яким сайтом будь-де. CORP: same-origin каже браузерам відмовити у міжпохідному вбудовуванні ваших ресурсів — тому інші сайти не можуть hotlink ваших ресурсів або завантажувати їх на свої сторінки. Ваш власний сайт все одно завантажує свої власні ресурси точно як раніше; блокуються лише зовнішні сайти.

Як виглядає «добре»: Cross-Origin-Resource-Policy: same-origin. (Якщо ви навмисно публікуєте ресурси для вбудовування іншими — публічний логотип, відкритий API — ваш розробник може послабити це для конкретних відповідей.)

COEP — Cross-Origin-Embedder-Policy (просунутий, зазвичай залиште вимкненим)

COEP завершує «міжпохідну ізоляцію»: у поєднанні з COOP він вимагає, щоб кожен ресурс, що завантажує ваша сторінка, явно погодився (через CORS або CORP). Зроблений правильно, це розблоковує певні потужні функції браузера (наприклад, SharedArrayBuffer) і додає ще один шар проти атак класу Spectre. Але оскільки він вимагає погодження від всього, що ви завантажуєте, він легко ламає сторонні інструменти — аналітику, шрифти, вбудовані віджети — які не були побудовані для погодження. Більшість сайтів не потребують функцій, які він розблоковує, і не повинні нести ризик зламу.

Як виглядає «добре»: для рідкісного сайту, якому це потрібно, Cross-Origin-Embedder-Policy: credentialless — безпечніше значення, менш імовірне для зламу зовнішніх ресурсів, ніж require-corp. Для всіх інших відсутність — це нормально, і наш звіт не оштрафує вас за це.

Як це виправити (безкоштовно, ~15 хвилин)

Передайте це вашому IT-фахівцю або веб-розробнику — виправлення безкоштовне. Додавання COOP і CORP — це пара однорядкових налаштувань на вашому сервері або CDN; ліцензії немає і постійних витрат немає. Єдина інструкція для власника: виконайте два безпечних і не вмикайте COEP без тестування.

Це заголовки відповіді, встановлені там, де виробляються відповіді вашого сайту — найлегше у вашому CDN (наприклад, Cloudflare), якщо він у вас є, або у конфігурації вашого веб-сервера.

Два безпечних заголовки (рекомендовані для всіх)

Cloudflare — Rules → Transform Rules → Modify Response Headers → Set:

Nginx:

add_header Cross-Origin-Opener-Policy   "same-origin" always;
add_header Cross-Origin-Resource-Policy "same-origin" always;

Apache:

Header always set Cross-Origin-Opener-Policy   "same-origin"
Header always set Cross-Origin-Resource-Policy "same-origin"

Їх безпечно додавати і вони не зламають нормальну функціональність. Після розгортання перезавантажте кілька сторінок і підтвердіть, що сайт поводиться точно як раніше (так і має бути).

Просунутий заголовок (лише якщо він вам конкретно потрібен)

Не вмикайте це без тестування в staging спочатку. COEP може зламати аналітику, шрифти та вбудовані віджети.

Cloudflare: Transform Rules → Set Cross-Origin-Embedder-Policy = credentialless.

Nginx:

add_header Cross-Origin-Embedder-Policy "credentialless" always;

Використовуйте credentialless замість require-corp — він менш імовірний для зламу зовнішніх ресурсів. Ретельно тестуйте в staging; стежте за будь-яким сторонніх скриптом, шрифтом або вбудованим елементом, що перестають завантажуватися. Якщо щось ламається і вам насправді не потрібні функції, що COEP розблоковує, просто видаліть заголовок — штрафу за його відсутність немає.

Примітки по платформі

Поширені помилки

Примітка про оцінку

Щоб бути абсолютно чітким: жодна з цих трьох перевірок не впливає на вашу оцінку. Вони зареєстровані в нашій методології як інформаційні, з нульовими балами, і відсутній ніколи нічого вам не коштує. Ми їх показуємо, бо два безпечних є дешевими, реальними покращеннями і бо бачення повної картини є корисним — а не тому, що є число для захисту. Якщо ви тут нічого не робите, ваша оцінка точно така сама. Якщо ви додаєте COOP і CORP, ви закрили пару реальних (хоч і нішевих) прогалин безкоштовно. Це правильний спосіб думати про цю сторінку: необов’язкове полірування, з однією чітко позначеною пасткою для уникання.

FAQ

Ці не впливають на мою оцінку — навіщо взагалі хвилюватися?

Два з них — так; один — мабуть, ні. COOP і CORP безкоштовні, займають хвилини і не зламають ваш сайт — вони закривають реальні (хоч і нішеві) вектори атаки, тому варті виконання як дешева гігієна. COEP є просунутим і може зламати сторонні інструменти, тому більшість компаній повинні залишити його вимкненим, якщо їм конкретно не потрібні функції браузера, які він розблоковує. Жоден з трьох не змінює вашу оцінку так чи інакше, тому немає терміновості — виконайте два безпечних як наведення порядку наступного разу, коли ваш розробник буде на сайті.

Я не технічний фахівець — це те, що мені потрібно виконати?

Особисто — ні, і не терміново. Оскільки вони є інформаційними, нічого поганого не станеться з вашою оцінкою, якщо ви пропустите їх. Якщо ви хочете додати два безпечних, передайте розділ «Як це виправити» тому, хто керує вашим сайтом або CDN — це пара однорядкових налаштувань і виправлення безкоштовне. Єдине, що слід позначити явно для COEP: скажіть їм не вмикати його без тестування, бо він може зламати аналітику та вбудовані віджети.

Яка різниця між цими і заголовками, що СПРАВДІ впливають на мою оцінку?

Оцінювані заголовки веб-безпеки — перенаправлення HTTPS, HSTS, Content-Security-Policy, захист від clickjacking (X-Frame-Options) і захист від MIME-sniffing — захищають від поширених, широко використовуваних атак, тому їхня відсутність коштує балів. Три на цій сторінці (COOP, CORP, COEP) є новішими, більш спеціалізованими засобами ізоляції браузера. Вони є хорошою практикою, але ще не базовим очікуванням, тому ми повідомляємо про них без оцінювання. Спочатку виконайте оцінювані; ці є поліруванням зверху.

Чи зламає додавання COOP або CORP мій сайт або інтеграції партнерів?

Рекомендовані налаштування (обидва 'same-origin') розроблені для безпечного використання. COOP лише розриває зв'язок з вікнами, які ваш сайт відкриває у спливних вікнах — нормальний перегляд, ваші власні сторінки та звичайні посилання не зачіпаються. CORP лише зупиняє *інші* сайти від вбудовування ваших зображень і скриптів; ваш власний сайт завантажує свої власні ресурси точно як раніше. Якщо ви насправді обслуговуєте ресурси (наприклад, публічний логотип або API), які інші сайти мають вбудовувати, ваш розробник може використовувати більш дозвільне налаштування для конкретних відповідей. Той, що справді ризикує зламом, — COEP — тримайте його вимкненим, якщо він не протестований.

Що насправді коштує мені 'hotlinking'?

Коли інший сайт вбудовує ваше зображення або скрипт прямо з вашого сервера замість розміщення власної копії, кожен відвідувач їхньої сторінки завантажує його від вас — за вашим рахунком пропускної здатності і показуючи ваш ресурс у контексті, якого ви не схвалювали. Для малого бізнесу це рідко буває катастрофічним, але це безкоштовні гроші з дверей, і CORP ('same-origin') зупиняє це на рівні браузера. Це також закриває тонкий шлях витоку даних, на який покладаються просунуті (класу Spectre) браузерні атаки.

Як виглядає «добре» для кожного з них?

COOP: заголовок Cross-Origin-Opener-Policy встановлений на 'same-origin'. CORP: заголовок Cross-Origin-Resource-Policy встановлений на 'same-origin'. COEP: заголовок Cross-Origin-Embedder-Policy — і якщо ви його взагалі встановлюєте, 'credentialless' є безпечнішим значенням, ніж 'require-corp'. Наш звіт просто відзначає, чи присутній кожен і що він встановлений; він ніколи не штрафує вас за відсутній. Прагніть до присутності COOP і CORP; залиште COEP відсутнім, якщо ви його не протестували.