web-dev-qa-db-ja.com

Content-Security-PolicyはX-Frame-Optionsとどのように連携しますか?

Content-Security-Policy無視X-Frame-Options、サーバーから返される、またはX-Frame-Optionsまだプライマリですか?

私が持っていると仮定:

  • ウェブサイト http://a.com with X-Frame-Options: DENY
  • およびWebサイト http://b.com with Content-Security-Policy: frame-src a.com

ブラウザはこのフレームをロードしますか?

不明です。
一方で、 http://a.com はフレーミングを明示的に拒否します。
一方で、- http://b.comhttp://a.com のフレーミングを明示的に許可します。

20

frame-src CSPディレクティブ (廃止され、child-srcに置き換えられます)は、ページ上のフレームで使用できるソースを決定します。

一方、X-Frame-Options応答ヘッダーは、他のどのページがiframeでそのページを使用できるかを決定します。

あなたの場合、http://a.comX-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年4月更新:

コンテンツセキュリティポリシー:ディレクティブ「child-src」は廃止されました。ディレクティブ「worker-src」を使用してワーカーを制御するか、ディレクティブ「frame-src」を使用してフレームを制御してください。

child-srcは廃止され、frame-srcが復活したようです。

34
Anand Bhat

あなたの仮説はどれも普遍的に真実ではありません。

  • ChromeはX-Frame-Optionsを無視します。
  • Safari 9以下はCSP frame-ancestorsを無視します。
  • Safari 10-12はCSP frame-ancestorsディレクティブを尊重しますが、両方が指定されている場合はprioritizeX-Frame-Optionsです。
6
NIRUPAM TEWARY

答えは実際にテストすることで見つかりました。
2つのWebサイトを作成し、記載されている状況を再現しました。

X-Frame-Optionsが主要なようです。
ターゲットサーバーがフレーミングを拒否する場合、クライアントWebサイトはiframeのどの値Content-Security-Policy 設定されています。

ただし、ドキュメントに確認はありません。

テスト済みChrome 54およびIE 11。