質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iframe

HTMLのタグ<iframe>です。<iframe>は、ドキュメント内に""inline frame""を作るHTML要素で、同じページでセパレートしているドキュメントが表示されるようにします。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Q&A

解決済

1回答

10054閲覧

Nginxでのインラインフレーム呼び出しの許可ドメイン設定方法

chapter

総合スコア36

iframe

HTMLのタグ<iframe>です。<iframe>は、ドキュメント内に""inline frame""を作るHTML要素で、同じページでセパレートしているドキュメントが表示されるようにします。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

0グッド

1クリップ

投稿2015/01/20 08:08

Nginxで、特定のドメイン以外からのインラインフレームの呼び出しを
制限したいのですが、上手く設定できない状態です。

元々Apacheで稼働させていた際は、.htaccessファイルに
以下のように記述して意図した通りに動作していました。

lang

1Header set X-Frame-Options "SAMEORIGIN" 2Header set X-Frame-Options "ALLOW-FROM http://sample.com"

Nginxの設定ファイルでも同様にできると思い、
以下のように記述したのですが、

lang

1add_header X-Frame-Options "SAMEORIGIN"; 2add_header X-Frame-Options "ALLOW-FROM http://sample.com";

許可したつもりの「sample.com」からのインラインフレームの
呼び出しも弾かれてしまいました。

つきましては、Nginxの設定で、特定ドメイン以外からの
インラインフレームの呼び出しを制限する方法について
教えていただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

1つ目の add_header を削除してみるとどうでしょうか。

add_header X-Frame-Options "ALLOW-FROM http://sample.com";

ALLOW-FROM は指定したオリジン だけ を許可するため ALLOW-FROM が有効に機能するならそれだけで十分なはずです。

FireFox で SAMEORIGIN と ALLOW-FROM の両方記述を試してみたところ、両方の制限が適用されるためか ALLOW-FROM で指定したオリジンでも、SAMEORIGIN での同一オリジンでも、インラインフレームを表示することができませんでした。

また、一部のブラウザは ALLOW-FROM がサポートされていないようです。

そのため、例えば Chrome だと ALLOW-FROM だけを指定すると無効な設定になって全部許可になってしまうようです。

投稿2015/01/20 09:33

ngyuki

総合スコア4514

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chapter

2015/01/20 12:33

ngyukiさん、こちらについてもご回答いただきありがとうございます。 1つ目を削除したところ、許可指定したドメインからインラインフレームで 呼び出せるようにはなりましたが、 許可指定した以外のドメインからでも全て呼び出せるようになってしまいました。 "SAMEORIGIN"で自ドメインのみ許可する記述を入れない場合、 デフォルトの全許可に対して、更に許可ドメインを追加していることに なってしまっているのかと思われます。 試しに記述の順番を変えてみましたが、やはり許可指定したドメインも含めて 弾かれてしまいました。
ngyuki

2015/01/20 12:53

インラインフレームの中の URL に `curl -I http://example.com/` としたら、どのように表示されますか?
chapter

2015/01/20 13:06

2ケースで試してみました。 1) add_header X-Frame-Options "ALLOW-FROM http://sample.com"; のみの場合 HTTP/1.1 200 OK Server: nginx Date: Tue, 20 Jan 2015 12:59:50 GMT Content-Type: text/html; charset=UTF-8 Content-Length: 19465 Connection: close Vary: Accept-Encoding Set-Cookie: XXXXXXXXXXXXXXX X-Frame-Options: ALLOW-FROM http://sample.com 2) add_header X-Frame-Options "SAMEORIGIN"; も記述した場合 HTTP/1.1 200 OK Server: nginx Date: Tue, 20 Jan 2015 13:02:15 GMT Content-Type: text/html; charset=UTF-8 Content-Length: 19465 Connection: close Vary: Accept-Encoding Set-Cookie: XXXXXXXXXXXXXXX X-Frame-Options: SAMEORIGIN X-Frame-Options: ALLOW-FROM http://sample.com これだけ見ると、後者でも表示されてもいいような感じですが、 後者だとそのドメインでもコンテンツが表示されない状態に なってしまいます。
ngyuki

2015/01/20 13:35

回答に追記しました。
chapter

2015/01/20 14:20

ngyukiさん、ご回答の追記ありがとうございます。 以前、Apacheの.htaccessファイルに記述していた際は、 以下のように列記していて、普段使っているChromeで 意図した動作になっていたはずなのですが。。。 Header set X-Frame-Options "SAMEORIGIN" Header set X-Frame-Options "ALLOW-FROM http://sample.com" .htaccessファイルはウェブサーバ変更後も同じフォルダに残っているので、 この記述の仕方だったのは確実なのと、 普段使っているChromeでインラインフレームから実際に呼び出せていたのは、 Nginxに載せ替えるまでほぼ毎日確認できていたのですが。 参考リンクを見ると、自信がなくなってきました。(汗) いずれにしても、インラインフレームの呼び出し制限に関しては、 単純にインラインフレームからの呼び出しを全部弾くというならともかく、 指定したドメインだけ許可するというのは、 現状のブラウザでのサポートが不完全なので実質機能しないどころか、 逆に許可したいドメインでも見れなくなってしまうリスクがある ということですね。 ブラウザのサポートの問題となると、現状ではどうしようもないですが、 お陰さまでスッキリと諦めることができそうです。 ありがとうございました。
ngyuki

2015/01/20 14:27

あ、Apache で下記の設定だと、前に書いているものが後に書いているもので上書きされます。 Header set X-Frame-Options "SAMEORIGIN" Header set X-Frame-Options "ALLOW-FROM http://sample.com" つまり、SAMEORIGIN の方は無いのと同じです。 もし、上書きではなくレスポンスヘッダの行を追加したければ set ではなく add です。 Header add X-Frame-Options "SAMEORIGIN" Header add X-Frame-Options "ALLOW-FROM http://sample.com" (同じ名前のヘッダが2行になりますが・・・)
chapter

2015/01/20 14:34

なるほどです! 元々Apacheで書いていた設定がドメイン許可の行しか 有効になっていなかったのですね。 お恥ずかしい限りです。 でも、これでApacheの時に許可していたドメインのみ 見れていたのが納得できました。 ブラウザによっては見れていなかったであろう、 というのは今更ながらに問題でしたが。
chapter

2015/01/20 15:37

あ、「Apacheの時に許可していたドメインのみ見れていた」 というのは実際には私の勘違いで、念のために補足しますと、 まず、以下のみを記述して、 Header set X-Frame-Options "SAMEORIGIN" 異なるドメインから呼び出しできなかったことを確認した後、 Header set X-Frame-Options "ALLOW-FROM http://sample.com" を追記して、該当ドメインから呼び出せるようになったことを 確認したという流れです。 実際には、Header setで追記したことで、上書きされたことと、 ChromeではALLOW-FROMが効かないため、 単に認識されずに全ドメインから呼び出しできていた、 というのが、実情だったと思われます。 自分の無知さ加減を暴露する感じでお恥ずかしい限りですが、 「Apacheの時に許可していたドメインのみ見れていた」 というのは正確ではなく、そう勘違いしていたということで、 訂正させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問