web-dev-qa-db-ja.com

X-Frame-Options:firefoxのALLOW-FROMおよびchrome

この記事のとおり、X-Frame-Optionsの「パススルー」を実装して、パートナーサイトが雇用主のサイトをiframeでラップできるようにします。 http://blogs.msdn.com/b/ ieinternals/archive/2010/03/30/combating-clickjacking-with-x-frame-options.aspx

(投稿するURLを分割する)

簡単に言えば、パートナーのページには、ドメインに対するURLを含むiframeがあります。ドメイン内のすべてのページに対して、&@mykey=topleveldomain.comのような特別なurl引数を追加して、ページのトップレベルドメインとは何かを教えます。

フィルターは、提供されている場合はURLからパートナーTLDを取得し、ホワイトリストに対して検証します。リストにある場合は、X-Frame-Optionsヘッダーに値ALLOW-FROM topleveldomain.comを付けて出荷します(今後のクリックのためにCookieを追加します)。ホワイトリストにない場合は、SAMEORIGINまたはDENYを発送します。

問題は、ALLOW-FROM domainを送信すると、最新のFirefoxおよびGoogle Chromeで全体的にノーオペレーションになるように見えることです。少なくともIE8はALLOW-FROMを正しく実装しているようです。

このページをご覧ください: http://www.enhanceie.com/test/clickjack 。 「コンテンツを表示する必要がある」5番目のボックスの直後にあるのは、コンテンツを表示するべきではないが、実際に表示するボックスです。この場合、iframeのページは、X-Frame-Options: ALLOW-FROM http://www.debugtheweb.comとは明らかに異なるTLDであるhttp://www.enhanceie.comを送信しています。それでも、フレームにはコンテンツが表示されます。

関連する(デスクトップ)ブラウザ間でX-Frame-OptionsALLOW-FROMで本当に実装されているかどうかについての洞察はありますか?おそらく構文が変更されましたか?

興味のあるリンク:

62
Rob

ALLOW-FROMはChromeまたはSafariではサポートされていません。 MDNの記事を参照してください: https://developer.mozilla.org/en-US/docs/Web/HTTP/X-Frame-Options

カスタムヘッダーを作成して正しいデータで送信する作業を既に行っています。ヘッダーが有効なパートナーからのものであることを検出し、他のすべての要求にDENYを追加したときにヘッダーを除外することはできませんか?既にロジックを動的に構築しているとき、AllowFromの利点がわかりませんか?

37
Kinlan

私はこの質問を投稿しましたが、フィードバックを見たことはありませんでした(数か月後に来たようです:)。

Kinlanが述べたように、ALLOW-FROMはX-Frame-Options値としてすべてのブラウザーでサポートされているわけではありません。

解決策は、ブラウザの種類に基づいて分岐することでした。 IEの場合、 X-Frame-Options を出荷します。それ以外の場合は、 X-Content-Security-Policy を出荷します。

これがお役に立てば幸いです。そして、ループを閉じるのに長い時間がかかってすみません!

18
Rob

Chromeでは、代わりに

response.AppendHeader("X-Frame-Options", "ALLOW-FROM " + Host);

Content-Security-Policyを追加する必要があります

string selfAuth = System.Web.HttpContext.Current.Request.Url.Authority;
string refAuth = System.Web.HttpContext.Current.Request.UrlReferrer.Authority;
response.AppendHeader("Content-Security-Policy", "default-src 'self' 'unsafe-inline' 'unsafe-eval' data: *.msecnd.net vortex.data.Microsoft.com " + selfAuth + " " + refAuth);

hTTP応答ヘッダーへ。
これは、refAuthが許可されているかどうかをサーバーで確認したことを前提としています。
また、Chrome(コンソールでの出力エラー)にallow-fromヘッダーを追加しないようにするには、ブラウザー検出を行う必要があることに注意してください。

詳細については、 私の答えはこちら を参照してください

6
Stefan Steiger