X-Frame-Options
X-Frame-Options
は
HTTP
のレスポンスヘッダーで、ブラウザーがページを
<frame>
、
<iframe>
、
<embed>
、
<object>
の中に表示することを許可するかどうかを示すために使用します。サイトはコンテンツが他のサイトに埋め込まれないよう保証することで、
クリックジャッキング
攻撃を防ぐために使用することができます。
セキュリティが強化されるのは、ユーザーが
X-Frame-Options
に対応したブラウザーを使用して文書にアクセスした場合のみです。
メモ:
Content-Security-Policy
ヘッダーに
frame-ancestors
ディレクティブがあり、対応しているブラウザーにおいてこのヘッダーを
置き換えて
います。
構文
X-Frame-Options
には 2 つの有効なディレクティブがあります。
X-Frame-Options: DENY X-Frame-Options: SAMEORIGIN
ディレクティブ
DENY
を指定した場合は、フレームにページを他のサイトから読み込もうとした時だけでなく、同じサイトから読み込もうとした時にも失敗します。一方、
SAMEORIGIN
を指定した場合は、フレームの中のページを含むサイトが、ページを提供しているサイトと同じである限り、フレーム内でページを利用することができます。
ページをフレーム内に表示することは、それを試みているサイトが何であろうとできません。
SAMEORIGIN
ページは、ページ自体と同じオリジンのフレーム内でのみ表示されます。仕様書ではこのオプションを最上位、親、チェーン全体のどれに適用するかをブラウザーベンダーに任せていますが、すべての祖先が同じオリジンでない限り、利用価値がないと議論されています。 ( Firefox バグ 725490 を参照)。対応の詳細は ブラウザーの互換性 もご覧ください。
ALLOW-FROM uri
これは廃止されたディレクティブであり、最近のブラウザーでは動作しません。使用しないでください。対応している古いブラウザーでは、ページは指定されたオリジン
uri
のフレーム内でのみ表示されます。なお、以前の Firefox では
SAMEORIGIN
と同じ問題がありました。 — フレームの祖先が同じオリジンであるかどうかをチェックしません。
Content-Security-Policy
ヘッダーには
frame-ancestors
ディレクティブがあり、代わりにこれを使用することができます。
メモ:
X-Frame-Options を
<meta>
要素に設定しても意味がありません。例えば、
<meta http-equiv="X-Frame-Options" content="deny">
は効果がありません。使用しないでください。以下の例にあるように、
X-Frame-Options
は HTTP ヘッダーを通じて設定された場合のみ動作します。