X-Frame-Options HTTP レスポンスヘッダは、ブラウザがページを <frame> または <iframe> の内部に表示することを許可するかを示すことができます。サイトはこのレスポンスヘッダを、クリックジャッキング攻撃を防止するために使用することができます。これは、自分のサイトのコンテンツが他のサイトに埋め込まれないと保証することによります。
X-Frame-Options を用いる
X-Frame-Options には、3 種類の値を設定できます:
-
DENY - サイト側の意図に関わらず、ページをフレーム内に表示することはできません。
-
SAMEORIGIN - 自身と生成元が同じフレーム内に限り、ページを表示することができます。
-
ALLOW-FROM uri - 指定された生成元に限り、ページをフレーム内に表示できます。
言い換えると DENY を指定した場合は、別のサイトのページをフレーム内に読み込むことだけでなく、同じサイトのページをフレーム内に読み込むことも不可能になります。一方 SAMEORIGIN を指定した場合は、フレームとフレーム内に読み込むページが同じサイトにある限り、フレーム内にページを読み込むことが可能です。
Apache の設定
Apache で X-Frame-Options ヘッダをすべてのページで送信するように設定するには、以下の記述をサイトの設定ファイルに追加してください:
Header always append X-Frame-Options SAMEORIGIN
nginx の設定
nginx で X-Frame-Options ヘッダを送信するには、以下の記述を http、server、 location のいずれかの設定に追加してください:
add_header X-Frame-OptionsSAMEORIGIN;
結果
現状では、X-Frame-Options ヘッダで拒否されている場合にフレーム内へページを読み込もうとすると、 Firefox は about:blank ページをフレーム内に表示します。将来は、about:blank に代わって何らかのエラーメッセージが表示される予定です。
ブラウザ実装状況
| 機能 | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| 基本サポート | 4.1.249.1042 | 3.6.9 (1.9.2.9) | 8.0 | 10.5 | 4.0 |
| ALLOW-FROM のサポート | 未サポート | 18.0 (18.0) バグ 690168 | 8.0? | ? | 未サポート WebKit bug 94836 |
| 機能 | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| 基本サポート | ? | ? | ? | ? | ? | ? |