web-dev-qa-db-ja.com

クリックジャッキングから保護しますが、ドメインでのフレーミングを許可しますか?

X-Frame-Options ヘッダーを使用してクリックジャッキングから保護したいのですが、サイトの安全でないバージョンで安全なコンテンツをフレームすることがあります1

A transparent secure iframe for submitting payment info is loaded inside the insecure version of the site.

現在、Firefoxのみがヘッダーの_ALLOW-FROM_形式をサポートしているように見えるため、条件付きでヘッダーを提供することを検討しています。

  • デフォルトでは、X-Frame-Optionsを含めます。
  • リファラーが^(.*\.)?example.com$の場合は、ヘッダーを省略します。

これはうまくいくようで、安全に失敗します:誰かのブラウザがリファラーを送信しないか、企業のファイアウォールがそれを取り除くと、彼らは私たちに支払うことはできません(これは悪いことです)が、私たちのコンテンツはフレーム化できませんサードパーティのサイト(これはさらに悪いでしょう)。

この戦略は現実の世界でどのように機能しますか?

1 一部の広告パートナーは、歴史的にHTTPSを介した広告の配信をサポートしていません。これが変更されたかどうかを調査しています。


[〜#〜] edit [〜#〜]:明確にするために、1つのケースで安全でないページに安全なiframeをネストするだけです。初めて何かをインラインで購入するユーザーをサポートしました。現在、それらのユーザーに対してHTTPS経由でサイト全体を提供することはできず、別のページに送信したり、ポップアップウィンドウを開いたりしたくありません。

広告なしのユーザーは常にHTTPSを取得しており、HTTPS経由で広告を配信する可能性についても調査しています。

3
s4y

最初に、フレームを介して提供されている安全なコンテンツを取り除くことによって問題を単純化することをお勧めします。

enter image description here

あなたやあなたの組織に対するDigではありませんが、私たちはあなたが画像を提供したようなフォームを信頼するようにしないように世界を訓練しようとしていますこれはあなたの質問の一部ではないことは承知していますが、Secure Transaction画像はそのhttps証明書の代わりにはなりません。

サードパーティのパートナーが安全なコンテンツのポータルとして機能する必要がない場合は、その可能性をなくすことで問題を単純化できます。安全なコンテンツに例外のないクリックジャッキングを実装します。フォームやフレームだけでなく、ページ全体をHTTPSとして実行します。誰かが空港で私の無料のwifiホットスポットを使用する場合、フォームまたはフレーム全体を簡単に差し替えて、Secure Transaction画像を備えた、同じように見える自分のものと置き換えることができます。

ポイントに戻って安全なコンテンツが排除され、問題の一部が簡素化されましたが、残っているのは、X-Frame-Optionsとのブラウザー互換性の問題です。

これについて議論するスタックオーバーフローでの質問 がありますが、それは問題を本当に解決するようには見えませんが、質問に答えます:ブラウザーの互換性は引き続き問題です。

あなたが考えるかもしれないもう一つのこと、私はクロスフレーム通信のために以前に porthole.js でいくつかの作業をしました、そして私がそれについて私に考えさせた事の一つは子フレームがそれを検証する能力を持つことです親、および親が子フレームを検証するために。

デモサイトにアクセス を使用して、サポートが必要なブラウザとの互換性をすばやく確認できます。

さらに、クエリ文字列を使用してパートナーに自分自身を識別させることもできます。

<iframe src="www.site.com/?partner=3tqdHB"></iframe>

次に、クリックジャッキング検出で親ウィンドウが検出されたら、適切なクエリ文字列パラメーターが存在することを確認します。存在する場合は、親フレームにチャレンジして、IDであることを証明し、ナンスを送信します。

親フレームは、提供されたナンスとその鍵を使用して、自分の身元を証明できます。

すべてがうまくいったら、killスクリプトを実行しないでください。そうでなければ、killスクリプトを実行します。

2
Andrew Hoffman