Как Content-Security-Policy работает с параметрами X-Frame?

тут Content-Security-Policy игнорировать X-Frame-Options, возвращаемых сервером, или X-Frame-Options все-таки первична?

предполагая, что у меня есть:

  • веб-сайт http://a.com с X-Frame-Options: DENY
  • и веб-сайт http://b.com с Content-Security-Policy: frame-src a.com

будет ли браузер загружать этот кадр?

непонятно.
С одной стороны,http://a.com явно отрицает кадрирование.
С другой стороны, http://b.com явно разрешает кадрирование для http://a.com.

3 ответов


на frame-src директива CSP (который устарел и заменен на child-src) определяет, какие источники можно использовать во фрейме на странице.

на X-Frame-Options заголовок ответа, с другой стороны, определяет, какие другие страницы могут использовать эту страницу в iframe.

в вашем случае, http://a.com С X-Frame-Options: DENY указывает, что никакая другая страница не может использовать его в кадре. Не имеет значения, что http://b.com в СКП -- не можете использовать http://a.com в рамка.


место, где X-Frame-Options пересекается с CSP через frame-ancestors директива. От CSP specificiation (выделено мной):

эта директива похожа на X-Frame-Options заголовок, который несколько агенты пользователей реализованы. The 'none' выражение источник примерно эквивалентно этому заголовку DENY, 'self' to SAMEORIGIN, и так далее. Основное отличие заключается в том, что многие агенты пользователей реализуют SAMEORIGIN такой, что он соответствует только против верхнего уровня местонахождение документа. Эта директива проверяет каждого предка. При наличии таковых предок не совпадает, нагрузка отменяется. [RFC7034]

на заменяет на X-Frame-Options заголовок. Если ресурс имеет обе политики, то frame-ancestors политика должна применяться и X-Frame-Options политика должна игнорироваться.

An старше вопрос указано это сделал не работает в Firefox в то время, но, надеюсь, теперь все изменилось.


обновление апрель 2018:

политика безопасности контента: директива "child-src" устарела. Используйте директиву "worker-src" для управления рабочими или директиву "frame-src" для управления кадрами соответственно.

выглядит так:child-src теперь является устаревшим и frame-src вернулся.


Это не универсально; Chrome игнорирует X-Frame-Options, а Safari 9 и ниже игнорируют CSP-Frame-ancestors. Safari 10 уважает директиву CSP frame-ancestors, но приоритизирует параметры X-Frame, если они указаны.


ответ был найден путем испытания на практике.
Я создал два веб-сайта и воспроизвел описанную ситуацию.

похоже, что X-Frame-Options является основным.
Если целевой сервер запрещает кадрирование, веб-сайт клиента не может отобразить эту страницу в iframe в зависимости от значений Content-Security-Policy задаются.

однако, я не нашел никаких подтверждений в документации.

протестировано на Chrome 54 и IE 11.