外部サイトから iframe で呼び出して読み込まれないようにする
外部サイトからiframeでページが読み込まれてしまって、あたかもそのサイトのコンテンツかのように扱われたり、そのサイトのように振る舞って利用者のデータを抜き取ったりと悪事にも使われることがあります。
iframe 自体は便利なものなのですが、使い手によっては悪くもなる。
そんな iframe でサイトを取り込みされないようにする方法を紹介します。
iframe で読み込まれないようにする
iframe で読み込まれないようにする方法として X-FRAME-OPTIONS を利用する方法があります、こちらを利用すると対応ブラウザではiframeでの読み込みができなくなるものです。IE8以降で他のブラウザでは最新のものなら基本的に対応しています。
この X-FRAME-OPTIONS を使って iframe での読み込みをブロックするには幾つかのパターンがあります
- サーバ全体で禁止にする
- .htacess をつかって特定ディレクトリ以下で禁止にする
- ヘッダー情報に加えてページ単位で禁止にする
また制御の方法として、iframeを一切禁止にする方法と、同一サイト内のiframeは読み込み可能にする方法があります。全体を禁止するときは Deny を使い 同一サイト内のiframeは読み込み可能にする場合は SAMEORIGIN を指定する形になります。
特定のブラウザでは 指定したURIでは許可という指定も一応可能で ALLOW-FROM uri を利用することも可能です、こちらは Chrome では対応していないみたいです?
サーバー全体で制御する
こちらは レンタルサーバーでは利用できない方法です、サーバーの設定ファイルの編集が必要になります
Apacheでは 設定ファイル httpd.conf に一行を追加します
全体を禁止にする場合は以下 Header always append X-Frame-Options DENY 同一サイト以外を禁止にする場合は以下 Header always append X-Frame-Options SAMEORIGIN
Nginxでは 設定ファイルの http、server、 location のどこかに一行追加
全体を禁止にする場合は以下 add_header X-Frame-Options DENY; 同一サイト以外を禁止にする場合は以下 add_header X-Frame-Options SAMEORIGIN;
これでサーバー全体で制御する事が出来ます。
ディレクトリ単位で制御する
こちらは .htaccess ファイルを使っての制御になります、多くのレンタルサーバーで利用可能な方法となります。制御したいディレクトリに .htaccess ファイルを作り 一行加える形になります、すでにある場合は追加する形になります。
全体を禁止にする場合は以下 Header always append X-Frame-Options DENY 同一サイト以外を禁止にする場合は以下 Header always append X-Frame-Options SAMEORIGIN
.htaccess ファイルは利用しているサーバーによっては、最後の行を改行しておかないとエラーになるケースがありますのでその点は注意してください。文法はApacheの設定ファイルと同一になります。
ヘッダーに情報を加えて制御する
サーバーの設定、.htaccessでの設定は結局のところページのヘッダー情報に、X-Frame-Optionsを指定しているに過ぎません、なのでページのヘッダーを直接指定することでも制御する事が可能です。
PHPでの制御
全体を禁止する場合、PHPファイルの先頭あたり(HTMLが出力される前)に以下を <?php header('X-FRAME-OPTIONS: DENY'); ?> 同一サイト以外を禁止する場合、PHPファイルの先頭あたり(HTMLが出力される前)に以下を <?php header('X-FRAME-OPTIONS: SAMEORIGIN'); ?>
番外編:Wordpressで制御する
WordPress が使えるということは、.htaccess が利用できると思いますが プラグインを使う方法が利用できます。またWordpressのプラグインで iframe を使うものがあるので Deny にしてしまうと正しく動作しない場合があるので sameorigin を使って制御すべきとなります、Wordpress使っているけどPHPとか.htaccessとかわからないという方はプラグインを利用するのが簡単ですかね。
あと基本的に同一サイト内で使う sameorigin で利用するのが良いかとも思います。
プラグイン → Simple Iframe Buster
今回は制御の仕方を調べてまとめたものとなります、内容は未検証なのであしからず。
ちなみに、iframeを読み込んであたかもそのサイトのように装って クリックさせることで攻撃をする事を「クリックジャッキング攻撃」っていってその対策としての有効手段になってます。
参考サイト
X-Frame-Options レスポンスヘッダ – MDN
COMMENT