Как 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'toSAMEORIGIN, и так далее. Основное отличие заключается в том, что многие агенты пользователей реализуют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.