110

X-Frame-Options ヘッダーを使用して保護する必要がある ASP.NET 4.0 IIS7.5 サイトがあります。

また、同じドメインと Facebook アプリからサイト ページを iframe にできるようにする必要があります。

現在、私は自分のサイトを次のようなサイトで構成しています。

Response.Headers.Add("X-Frame-Options", "ALLOW-FROM SAMEDOMAIN, www.facebook.com/MyFBSite")

Chrome または Firefox で Facebook ページを表示すると、サイト ページ (Facebook ページで iframe されている) は正常に表示されますが、IE9 では次のエラーが表示されます。

「このページは表示できません…」(X-Frame_Options制限のため)。

X-Frame-Options: ALLOW-FROM複数のドメインをサポートするように を設定するにはどうすればよいですか?

X-FRAME-OPTION単一のドメインしか定義できない場合、新機能であることは根本的に欠陥があるように思われます。

4

12 に答える 12

119

X-Frame-Options廃止されました。MDNから:

この機能は Web 標準から削除されました。一部のブラウザーはまだサポートしている可能性がありますが、廃止される過程にあります。古いプロジェクトや新しいプロジェクトでは使用しないでください。それを使用しているページまたは Web アプリは、いつでも壊れる可能性があります。

最新の代替手段はヘッダーです。他の多くのポリシーとともに、ディレクティブContent-Security-Policyを使用して、フレーム内でページをホストできる URL をホワイトリストに登録できます。複数のドメインとワイルドカードをサポートします。例:frame-ancestors
frame-ancestors

Content-Security-Policy: frame-ancestors 'self' example.com *.example.net ;

残念ながら、現時点では、Internet Explorer は Content-Security-Policy を完全にはサポートしていません

更新: MDN は非推奨のコメントを削除しました。これは、 W3C の Content Security Policy Levelからの同様のコメントです。

frame-ancestorsディレクティブはヘッダーを廃止します。X-Frame-Optionsリソースに両方のポリシーがある場合、ポリシーをframe-ancestors適用する必要があり、X-Frame-Optionsポリシーを無視する必要があります。

于 2014-09-02T07:06:19.283 に答える
41

RFC 7034から:

1 つの ALLOW-FROM ステートメントで複数のドメインを宣言するためのワイルドカードまたはリストは許可されていません

そう、

X-Frame-Options: ALLOW-FROM を設定して複数のドメインをサポートするにはどうすればよいですか?

できません。回避策として、パートナーごとに異なる URL を使用できます。URL ごとに独自の値を使用できX-Frame-Optionsます。例えば:

partner   iframe URL       ALLOW-FROM
---------------------------------------
Facebook  fb.yoursite.com  facebook.com
VK.COM    vk.yoursite.com  vk.com

あなたはyousite.comただ使うことができますX-Frame-Options: deny

ところで、今のところ Chrome (およびすべての webkit ベースのブラウザー)は、ステートメントをまったくサポートしていません。 ALLOW-FROM

于 2014-01-24T09:57:25.170 に答える
7

複数のドメインを許可するだけでなく、動的ドメインを許可するアプローチはどうでしょうか。

ここでの使用例は、iframe を介して SharePoint 内にサイトをロードする Sharepoint アプリ パーツを使用したものです。問題は、sharepoint にhttps://yoursite.sharepoint.comなどの動的サブドメインがあることです。したがって、IE の場合、ALLOW-FROM https://.sharepoint.com を指定する必要があります。

トリッキーなビジネスですが、次の 2 つの事実を知っていれば、それを成し遂げることができます。

  1. iframe が読み込まれると、最初のリクエストで X-Frame-Options のみが検証されます。iframe が読み込まれると、iframe 内を移動でき、ヘッダーは後続のリクエストでチェックされません。

  2. また、iframe が読み込まれると、HTTP リファラーは親 iframe の URL になります。

これら 2 つの事実をサーバー側で活用できます。Ruby では、次のコードを使用しています。

  uri = URI.parse(request.referer)
  if uri.host.match(/\.sharepoint\.com$/)
    url = "https://#{uri.host}"
    response.headers['X-Frame-Options'] = "ALLOW-FROM #{url}"
  end

ここでは、親ドメインに基づいてドメインを動的に許可できます。この場合、ホストの末尾が sharepoint.com であることを確認して、サイトをクリックジャッキングから保護します。

このアプローチに関するフィードバックをお待ちしております。

于 2015-11-03T03:16:02.510 に答える
4

MDN の仕様によるX-Frame-Options: ALLOW-FROMと、Chrome ではサポートされておらず、Edge と Opera でのサポートは不明です。

Content-Security-Policy: frame-ancestors(この W3 仕様X-Frame-Optionsに従って)オーバーライドしますが、互換性は限られています。これらのMDN Specsによると、IE または Edge ではサポートされていません。frame-ancestors

于 2017-08-24T23:40:45.257 に答える
0

まったく同じではありませんが、場合によってALLOWALLは機能する可能性があります。制限を効果的に削除する別のオプションがあります。これは、テスト/実稼働前の環境に適している可能性があります

于 2017-01-04T09:59:50.507 に答える
-4

考えられる回避策の 1 つは、ここで説明されている「フレーム ブレーカー」スクリプトを使用することです。

「if」ステートメントを変更して、許可されたドメインを確認するだけです。

   if (self === top) {
       var antiClickjack = document.getElementById("antiClickjack");
       antiClickjack.parentNode.removeChild(antiClickjack);
   } else {
       //your domain check goes here
       if(top.location.host != "allowed.domain1.com" && top.location.host == "allowed.domain2.com")
         top.location = self.location;
   }

この回避策は安全だと思います。JavaScript を有効にしないと、悪意のある Web サイトがページをフレーミングするというセキュリティ上の懸念がなくなるからです。

于 2014-02-20T06:54:43.647 に答える
-9

はい。この方法では、複数のドメインが許可されました。

VB.NET

response.headers.add("X-Frame-Options", "ALLOW-FROM " & request.urlreferer.tostring())
于 2015-04-11T20:34:10.303 に答える