web-dev-qa-db-ja.com

iframeの複数ネストされた埋め込みを制御するにはどうすればよいですか?

ドメインexample1.com iframeを埋め込みます。

ドメインexample2.comexample1.comから提供されるiframeを埋め込みます。

X-Frame-Options: ALLOW FROM *.example1.com と同様 Content-Security-Policyframe-ancestors

ただし、ウィンドウのドメインはexample2.comであり、これはexample1.comと等しくないため、ブラウザはiframeコンテンツの表示を許可しません。

埋め込み(example1.com)と埋め込みの埋め込み(example2.com)にホワイトリストを要求するにはどうすればよいですか?

4
Joshua Fox

CSP _frame-ancestors_はすでに必要なことを行っています

  • _Content-Security-Policy: frame-ancestors [...]_は、entire祖先チェーンをチェックします。親ドキュメントがソースホワイトリストと一致しない場合、ドキュメントは読み込まれません。

    チェーンがtop(child(grandchild))の場合、grandchildに対するこのポリシーは次のようになります。

    _Content-Security-Policy: frame-ancestors top child
    _

    しかし、これらのどれも:

    _ Content-Security-Policy: frame-ancestors top
     Content-Security-Policy: frame-ancestors child
     Content-Security-Policy: frame-ancestors 'none'
    _
  • _X-Frame-Options: allow-from [...]_は単一の祖先のみをチェックします。ほとんどのブラウザのデファクトインプリメンテーションは、topOriginをチェックしますが、中間のOriginはチェックしません。

    チェーンがtop(child(grandchild))の場合、grandchildに対するこのディレクティブは機能します。

    _X-Frame-Options: allow-from http://top/
    _

    しかし、これらのどれも:

    _X-Frame-Options: allow-from http://child/
    X-Frame-Options: sameorigin
    X-Frame-Options: deny
    _

W3C CSP2仕様でも違いが説明されています。

7.7.1。 X-Frame-Optionsとの関係

このディレクティブは、いくつかのユーザーエージェントが実装した_X-Frame-Options_ヘッダーに似ています。 _'none'_ソース式は、そのヘッダーのDENY、_'self'_からSAMEORIGINなどとほぼ同等です。主な違いは、多くのユーザーエージェントがSAMEORIGINを実装して、トップレベルのドキュメントの場所とのみ一致することです。このディレクティブは、各祖先をチェックします。祖先が一致しない場合、ロードはキャンセルされます。 [RFC7034]

(ソース)

3
Arminius