Как 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.