Nginxでのインラインフレーム呼び出しの許可ドメイン設定方法
解決済
回答 1
投稿
- 評価
- クリップ 1
- VIEW 7,600
制限したいのですが、上手く設定できない状態です。
元々Apacheで稼働させていた際は、.htaccessファイルに
以下のように記述して意図した通りに動作していました。
Header set X-Frame-Options "SAMEORIGIN"
Header set X-Frame-Options "ALLOW-FROM http://sample.com"
Nginxの設定ファイルでも同様にできると思い、
以下のように記述したのですが、
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Frame-Options "ALLOW-FROM http://sample.com";
許可したつもりの「sample.com」からのインラインフレームの
呼び出しも弾かれてしまいました。
つきましては、Nginxの設定で、特定ドメイン以外からの
インラインフレームの呼び出しを制限する方法について
教えていただきたいです。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+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
がサポートされていないようです。
- https://developer.mozilla.org/ja/docs/HTTP/X-Frame-Options
- https://developer.mozilla.org/en-US/docs/Web/HTTP/X-Frame-Options
そのため、例えば Chrome だと ALLOW-FROM だけを指定すると無効な設定になって全部許可になってしまうようです。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.22%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2015/01/20 21:33
1つ目を削除したところ、許可指定したドメインからインラインフレームで
呼び出せるようにはなりましたが、
許可指定した以外のドメインからでも全て呼び出せるようになってしまいました。
"SAMEORIGIN"で自ドメインのみ許可する記述を入れない場合、
デフォルトの全許可に対して、更に許可ドメインを追加していることに
なってしまっているのかと思われます。
試しに記述の順番を変えてみましたが、やはり許可指定したドメインも含めて
弾かれてしまいました。
2015/01/20 21:53
2015/01/20 22:06
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
これだけ見ると、後者でも表示されてもいいような感じですが、
後者だとそのドメインでもコンテンツが表示されない状態に
なってしまいます。
2015/01/20 22:35
2015/01/20 23:20
以前、Apacheの.htaccessファイルに記述していた際は、
以下のように列記していて、普段使っているChromeで
意図した動作になっていたはずなのですが。。。
Header set X-Frame-Options "SAMEORIGIN"
Header set X-Frame-Options "ALLOW-FROM http://sample.com"
.htaccessファイルはウェブサーバ変更後も同じフォルダに残っているので、
この記述の仕方だったのは確実なのと、
普段使っているChromeでインラインフレームから実際に呼び出せていたのは、
Nginxに載せ替えるまでほぼ毎日確認できていたのですが。
参考リンクを見ると、自信がなくなってきました。(汗)
いずれにしても、インラインフレームの呼び出し制限に関しては、
単純にインラインフレームからの呼び出しを全部弾くというならともかく、
指定したドメインだけ許可するというのは、
現状のブラウザでのサポートが不完全なので実質機能しないどころか、
逆に許可したいドメインでも見れなくなってしまうリスクがある
ということですね。
ブラウザのサポートの問題となると、現状ではどうしようもないですが、
お陰さまでスッキリと諦めることができそうです。
ありがとうございました。
2015/01/20 23:27
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行になりますが・・・)
2015/01/20 23:34
元々Apacheで書いていた設定がドメイン許可の行しか
有効になっていなかったのですね。
お恥ずかしい限りです。
でも、これでApacheの時に許可していたドメインのみ
見れていたのが納得できました。
ブラウザによっては見れていなかったであろう、
というのは今更ながらに問題でしたが。
2015/01/21 00:37
というのは実際には私の勘違いで、念のために補足しますと、
まず、以下のみを記述して、
Header set X-Frame-Options "SAMEORIGIN"
異なるドメインから呼び出しできなかったことを確認した後、
Header set X-Frame-Options "ALLOW-FROM http://sample.com"
を追記して、該当ドメインから呼び出せるようになったことを
確認したという流れです。
実際には、Header setで追記したことで、上書きされたことと、
ChromeではALLOW-FROMが効かないため、
単に認識されずに全ドメインから呼び出しできていた、
というのが、実情だったと思われます。
自分の無知さ加減を暴露する感じでお恥ずかしい限りですが、
「Apacheの時に許可していたドメインのみ見れていた」
というのは正確ではなく、そう勘違いしていたということで、
訂正させていただきます。