Ответ 1
CSP-директива frame-src
(которая устарела и заменена на child-src
) определяет, какие источники можно использовать во фрейме на странице.
С другой стороны, заголовок ответа X-Frame-Options
определяет, какие другие страницы могут использовать эту страницу в iframe.
В вашем случае http://a.com
с X-Frame-Options: DENY
указывает, что никакая другая страница не может использовать его во фрейме. Неважно, что http://b.com
имеет в своем CSP - ни одна страница не может использовать http://a.com
во фрейме.
Место, где X-Frame-Options
пересекается с CSP, - это директива frame-ancestors
. Из спецификации CSP (выделено мое):
Эта директива похожа на заголовок
X-Frame-Options
который реализовали несколько пользовательских агентов. Выражение источника'none'
примерно эквивалентно заголовкамDENY
,'self'
дляSAMEORIGIN
и так далее. Основное отличие состоит в том, что многие пользовательские агенты реализуютSAMEORIGIN
, что он сопоставляется только с местоположением документов верхнего уровня. Эта директива проверяет каждого предка. Если какой-либо предок не совпадает, загрузка отменяется. [RFC7034]Директива
frame-ancestors
отменяет заголовокX-Frame-Options
. Если у ресурса есть обе политики, ДОЛЖНА применяться политикаframe-ancestors
политикаX-Frame-Options
СЛЕДУЕТ игнорировать.
Более старый вопрос показал, что в то время это не работало в Firefox, но, надеюсь, сейчас все изменилось.
ОБНОВЛЕНИЕ Апрель 2018 года:
Политика безопасности контента: Директива child-src устарела. Пожалуйста, используйте директиву 'worker-src для управления работниками, или директиву' frame-src для управления кадрами соответственно.
Похоже, child-src
теперь устарел, а frame-src
вернулся.