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.
Що зробити
- Перегляньте знахідку: у ній показано значення
X-Frame-Options, заголовки CSP і правило вбудовування у фрейми, яке ми розв’язали зframe-ancestors. - Вирішіть, хто може вбудовувати сторінку у фрейм, і вкажіть це у
frame-ancestors. - Задайте
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