X-Frame-Options суперечить frame-ancestors або недійсний поруч із ним

У звітіX-Frame-Options and frame-ancestors disagree

frame_policy_conflict · Потребує перегляду

Коротка відповідь

Ця порада з безпеки з’являється, коли сторінка надсилає X-Frame-Options і заголовок Content-Security-Policy з frame-ancestors, а вони описують різні правила вбудовування у фрейми або X-Frame-Options має значення, відмінне від DENY чи SAMEORIGIN. Два заголовки, що не узгоджуються, легко хибно прочитати, коли ви їх підтримуєте, а деякі значення браузери ігнорують. Узгодьте їх або залиште один.

Серйозність: До уваги. Порада з безпеки в розділі «Корисно знати». Узгодьте захоплені заголовки вбудовування для зручності підтримки; це вузьке порівняння не перевіряє поведінку браузера чи ранжування.

Чому це важливо

MDN вказує на директиву frame-ancestors політики Content Security Policy як на повніший засіб керування, ніж пропонує X-Frame-Options, і зазначає, що сучасні браузери ігнорують заголовок X-Frame-Options, який використовує застарілу директиву ALLOW-FROM.

Що зробити

  1. Перегляньте знахідку: у ній показано значення X-Frame-Options, заголовки CSP і правило вбудовування у фрейми, яке ми розв’язали з frame-ancestors.
  2. Вирішіть, хто може вбудовувати сторінку у фрейм, і вкажіть це у frame-ancestors.
  3. Задайте X-Frame-Options відповідне значення — DENY для 'none' або SAMEORIGIN для 'self' — чи приберіть його.

Коли залишити як є: якщо ви свідомо зберігаєте старіший заголовок для браузерів, які не підтримують frame-ancestors, і приймаєте, що вони дотримуються його правила, можна залишити як є.

Що ми читаємо

Ми читаємо заголовки кінцевої відповіді кожної просканованої сторінки з власним user agent. Сторінка оцінюється, коли вона має заголовок X-Frame-Options і принаймні один заголовок Content-Security-Policy з frame-ancestors; frame-ancestors у тезі <meta> не враховується.

За всіма політиками в заголовках сторінки ми розв’язуємо frame-ancestors як заборону, коли одна політика не має дозволеного джерела, як те саме джерело, коли кожен розв’язаний список джерел — це лише 'self', і як дозвіл для всіх у простому випадку *. Сторінка фіксується, коли X-Frame-Options має значення, відмінне від DENY чи SAMEORIGIN, більш ніж одне різне значення або значення, що відрізняється від розв’язаного правила; frame-ancestors * суперечить чинному обмежувальному значенню X-Frame-Options.

Списки джерел із хостами чи схемами не розв’язуються відносно чинного значення X-Frame-Options, тож це порівняння не перевіряється. Недійсне значення X-Frame-Options однаково фіксується, навіть коли результат frame-ancestors не розв’язано. Сторінки з однаковими захопленими текстами заголовків фіксуються разом, одна знахідка на точне поєднання.

Приклад і докази

Ілюстративний приклад — одна відповідь, а не реальний аудит.

https://bakery.example/ надсилає:

X-Frame-Options: DENY
Content-Security-Policy: frame-ancestors 'self'

frame-ancestors 'self' дозволяє власним сторінкам сайту вбудовувати її у фрейм, тоді як DENY не дозволяє жодній сторінці, тому сторінка фіксується.

X-Frame-Options: SAMEORIGIN
Content-Security-Policy: frame-ancestors 'self'

Можливе виправлення: зробіть так, щоб старіший заголовок відповідав.

Підтвердити й перевірити знову

Перевірте самі: відкрийте заголовки відповіді сторінки й порівняйте X-Frame-Options з frame-ancestors у Content-Security-Policy: DENY відповідає 'none', а SAMEORIGIN відповідає 'self'.

Повторна перевірка: Повний аудит — запустіть новий повний аудит. За повністю захоплених заголовків ця знахідка про поєднання заголовків закривається, лише коли жодна наразі просканована сторінка більше не видає того самого конфлікту; нова сторінка зі старим поєднанням залишає її відкритою. Зміна будь-якого із заголовків створює нове поєднання для оцінки, а видалення X-Frame-Options робить це правило там незастосовним. Нерозв’язане порівняння хостів чи схем не може довести, що попередній конфлікт виправлено.

Обмеження та джерела

Недійсний X-Frame-Options фіксується, лише коли наявний також заголовок із frame-ancestors. Списки джерел із хостами та схемами не розв’язуються відносно чинного значення X-Frame-Options, а вбудовування у фрейм не пробується в браузері. Змінене поєднання заголовків фіксується окремо, якщо воно однаково відповідає цьому правилу.

Упевненість: Висока, бо обидва заголовки зчитуються безпосередньо.

Джерела

  • MDN, Заголовок X-Frame-Options — вказує на директиву frame-ancestors як на повніший засіб керування і зазначає, що сучасні браузери ігнорують заголовок із застарілою директивою ALLOW-FROM. Перевірено 28 вересня 2026.

Редакційна перевірка: 2 листопада 2026