iframeで「X-Frame-Options」を設定する方法


170

iframeがこのようなものを作成した場合:

var dialog = $('<div id="' + dialogId + '" align="center"><iframe id="' + frameId + '" src="' + url + '" width="100%" frameborder="0" height="'+frameHeightForIe8+'" data-ssotoken="' + token + '"></iframe></div>').dialog({

エラーを修正するにはどうすればよいですか?

'https://www.google.com.ua/?gws_rd=ssl'「X-Frame-Options」が「SAMEORIGIN」に設定されているため、フレームでの表示が拒否されました。

JavaScriptを使って?

回答:


227

あなたは設定できませんX-Frame-Optionsiframe。これは、(google.com.ua例では)リソースを要求しているドメインによって設定された応答ヘッダーです。SAMEORIGINこの場合、ヘッダーをに設定していiframeます。これは、ドメインの外部でのリソースのロードを許可していないことを意味します。詳細については、MDN のX-Frame-Options応答ヘッダーを参照してください。

ヘッダー(ここではChrome開発者ツールに表示されています)を簡単に調べるとX-Frame-Options、ホストから返された値がわかります。

ここに画像の説明を入力してください


7
YouTubeでは、エンドポイントURLを「埋め込み」バージョンに変更できます。stackoverflow.com/questions/25661182/を参照してください (これは厳密にはOPが検索しているものではありませんが、グーグルが最初にこの結果を出します!)

73

X-Frame-Options要求されたドメインがフレーム内に表示されることを許可するかどうかを示す要求への応答に含まれるヘッダーです。これはJavaScriptやHTMLとは関係がなく、リクエストの発信者が変更することはできません。

このウェブサイトでは、このヘッダーをに表示できないように設定していiframeます。クライアントがこの動作を止めるためにできることは何もありません。

X-Frame-Optionsの詳細


リクエストヘッダーではなく、レスポンスヘッダーで設定されます。しかし、そうでなければ正確な説明!
Nickang

2
@nickangそれが私が意味したことですが、用語が明確ではなかったのに同意します。混乱を避けるために編集しました。ありがとう。
Rory McCrossan

31

iframeのコンテンツを送信するサーバーを制御している場合X-Frame-Optionsは、Webサーバーでの設定を行うことができます。

Apacheの構成

すべてのページのX-Frame-Optionsヘッダーを送信するには、これをサイトの構成に追加します。

Header always append X-Frame-Options SAMEORIGIN

nginxの構成

X-Frame-Optionsヘッダーを送信するようにnginxを構成するには、http、サーバー、または場所の構成にこれを追加します。

add_header X-Frame-Options SAMEORIGIN;

設定なし

このヘッダーオプションはオプションであるため、オプションがまったく設定されていない場合は、次のインスタンス(訪問者のブラウザーやプロキシなど)にこれを構成するオプションを提供します

ソース:https : //developer.mozilla.org/en-US/docs/Web/HTTP/X-Frame-Options


これは私を助けました。私はこれらの2行をコメントアウトします:add_header Strict-Transport-Security "max-age=86400; includeSubdomains"; add_header X-Frame-Options DENY;nginx-snippetsから、そしてそれはすぐに機能しました。
Zeth

NGINX、場所、内部の場所を言うことが重要ですか?
Peter Krauss

ピータークラウス、何が欲しい?
rubo77

14

ソリューションはサーバー側では実際には言及されていなかったので:

このようなものを設定する必要があります(Apacheの例)。これはすべてで許可されているため、最良のオプションではありませんが、サーバーが正しく動作していることを確認したら、簡単に設定を変更できます。

           Header set Access-Control-Allow-Origin "*"
           Header set X-Frame-Options "allow-from *"

5

そうでもない...私が使った

 <system.webServer>
     <httpProtocol allowKeepAlive="true" >
       <customHeaders>
         <add name="X-Frame-Options" value="*" />
       </customHeaders>
     </httpProtocol>
 </system.webServer>

これは解決策のように見えますが、これはセキュリティ違反ですか?
Yogurtu

1
それはだではないあなたは、あなたがやっている内容を正確に把握しない限り、あなたのサイトのために無効に同一生成元ポリシーに良いアイデア。自分とは異なるドメインにコンテンツを埋め込むことはできません。codecademy.com/articles/what-is-corsおよび同様のチュートリアルを参照してください。
slhck 2018


2

X-Frame-Options HTTP応答ヘッダーを使用して、ブラウザーで<frame><iframe>またはのページをレンダリングできるかどうかを示すことができます<object>。サイトはこれを使用して、コンテンツが他のサイトに埋め込まれないようにすることで、クリックジャッキング攻撃を回避できます。

詳細情報:https : //developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options

この問題の代替ソリューションがあり、これをPHPを使用して実演します。

iframe.php:

<iframe src="target_url.php" width="925" height="2400" frameborder="0" ></iframe>

target_url.php:

<?php 
  echo file_get_contents("http://www.example.com");
?>

5
これは、ページがロードされた後にページを使用するための実行可能なソリューションですか?初期ロード後にページを操作できますか?ロード後のコンテンツを使用するために、ドメインに対するすべてのリクエストをプロキシする必要はないでしょうか?
ティモシーゴンザレス

0

この目的のために、あなたはあなたのApacheまたはあなたが使用している他のサービスの場所を一致させる必要があります

Apacheを使用している場合は、httpd.confファイル内。

  <LocationMatch "/your_relative_path">
      ProxyPass absolute_path_of_your_application/your_relative_path
      ProxyPassReverse absolute_path_of_your_application/your_relative_path
   </LocationMatch>

0

解決策は、ブラウザプラグインをインストールすることです。

X-Frame-OptionsDENY(またはSAMEORIGIN別のサーバーオリジン)でHTTPヘッダーを発行するWebサイトは、IFRAMEに統合できません... X-Frame-Optionsヘッダーを無視するブラウザープラグインをインストールしてこの動作を変更しない限り(たとえば、ChromeのXフレームヘッダーを無視する))。

セキュリティ上の理由から、これはまったくお勧めできません。


0

あなたはこのようにiframeにロードしたいサイトのウェブ設定でx-frame-optionを設定できます

<httpProtocol>
    <customHeaders>
      <add name="X-Frame-Options" value="*" />
    </customHeaders>
  </httpProtocol>

stackoverflowを開きたい場合、どこでweb configを見つけることができますか?サーバー側ではありませんか?
irum zahra

-1

x-iframeは、サイトの所有者が提供する必要があり、サーバールール内にあるため、HTML本文に実際に追加することはできません。

あなたがおそらくできることは、ターゲットURLのコンテンツとそのphp URLのiframeをロードするPHPファイルを作成することです。これはスムーズに動作するはずです。


1
「たぶんできる」答えがなければコメントとして投稿
MK

それが答えであることが判明したらどうなるでしょうMK
Sushant Chaudhari

次に、特定の解決策ではなく機能した提案であるため、コメントとして配置する必要があります
MK

-2

Tomcatインスタンスレベルの構成ファイル(web.xml)で行うことができます。web.xml構成ファイルに 'filter'とfilter-mappingを追加する必要があります。[X-frame-options = DENY]はグローバル設定であるため、すべてのページに追加されます。

<filter>
        <filter-name>httpHeaderSecurity</filter-name>
        <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
        <async-supported>true</async-supported>
        <init-param>
          <param-name>antiClickJackingEnabled</param-name>
          <param-value>true</param-value>
        </init-param>
        <init-param>
          <param-name>antiClickJackingOption</param-name>
          <param-value>DENY</param-value>
        </init-param>
    </filter>

  <filter-mapping> 
    <filter-name>httpHeaderSecurity</filter-name> 
    <url-pattern>/*</url-pattern>
</filter-mapping>

-3

xmlアプローチに従っている場合は、以下のコードが機能します。

    <security:headers>
        <security:frame-options />
        <security:cache-control />
        <security:content-type-options />
        <security:xss-protection />
    </security:headers>
<security:http>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.