フレームキラー(またはフレームバスター、フレームブレーカー)は、ウェブサイトやウェブアプリケーションがウェブページをフレーム内に表示させないようにするための技術です。フレームとはウェブブラウザウィンドウを分割したもので、小さなウィンドウのように機能します。フレームキラーは通常、フレームセット内からウェブサイトが許可なく読み込まれたり、クリックジャッキングなどの攻撃によって読み込まれたりすることを防ぐために使用されます。
X-Frame-Optionsフレームキラースクリプトは、主にとヘッダーの使用に置き換えられました。これらのヘッダーは、ページがフレーム内に読み込まれるのを最初から防ぎます。これらのヘッダーはすべての最新ブラウザでサポートされており、JavaScriptを使用する必要はありません。[ 1 ]これらのヘッダーは、HTML 内に直接記述するのではなく、 ウェブサーバーソフトウェア内で指定することを意図しています。Content-Security-Policy
実装
フレームキラーは、現在のウィンドウがメインウィンドウかどうかを検証するJavaScriptを使用して実装されています。推奨される方法は、デフォルトでウィンドウのレンダリングをブロックし、現在のウィンドウがメインウィンドウであることを確認した後にのみブロックを解除することです。
< style > html { display : none ; } style > < script > if ( self == top ) { document . documentElement . style . display = 'block' ; } else { top . location = self . location ; } </ script >このアプローチは、2010年にグスタフ・リズテット、エリー・バーシュテイン、ダン・ボネ、コリン・ジャクソンによって、既存のフレームバスティング技術の限界とそれを回避する技術を強調した論文で提案されました。 [ 2 ]
代替解決策
別の選択肢としては、フレームキラーを動作させるかどうかをユーザーが決定できるようにすることが挙げられます。
var framekiller = false ; window . onbeforeunload = function () { if ( framekiller ) { return "..." ; // ユーザーの意思決定に役立つメッセージ} };以下のコードをフレーム タグの後に追加する必要があります。
// "my_frame" は、ページドキュメント内のフレームの実際の ID に応じて変更する必要があります。getElementById ( "my_frame" ) .onload = function () { framekiller = true ; };オリジナルフレームキラー
歴史的に、最初のフレームキラー スクリプトは次のように単純なものでした。
< script type = "text/javascript" > if ( top != self ) top . location . replace ( location ); </ script >ここでのロジックは、ページを表示するものの、先頭の位置が現在のページと同じかどうかを確認し、異なる場合は先頭を現在のページに置き換えるというものでした。しかし、この方法は、外側のフレームからのフレームバスタースクリプトの実行をブロックすることで簡単に回避できます。[ 2 ]
フレームキラーの制限
クライアントサイドJavaScriptソリューションは、エンドユーザーのブラウザが独自のセキュリティ対策を強制することを前提としています。そのため、ページを他のページに埋め込むことを禁止する手段としては有効ですが、信頼性に欠けます。以下の状況では、上記のスクリプトが役に立たない可能性があります。
- ユーザーエージェントはJavaScript をサポートしていません。
- ユーザーエージェントは JavaScript をサポートしていますが、ユーザーはサポートを無効にしています。
- ユーザーエージェントの JavaScript サポートに欠陥があるか、部分的に実装されています。
アンチフレームキラー
HTML5のiframeにはsandbox属性があります。[ 3 ]この属性の値は、 iframeのコンテンツに許可される機能のセットです。値が空または未設定の場合、iframeのコンテンツはJavaScriptを実行せず、トップレベルのナビゲーションも許可しません。値内のスペース区切りの例外セットにallow-scriptsを指定すると、iframeはJavaScriptを許可しますが、トップレベルのナビゲーションは許可せず、iframe内のフレームキラーは無効になります。
参照
- クリックジャッキング- X-Frame-Optionsヘッダーなどのフレームへの埋め込みを防ぐためのより洗練された方法について説明します。
参考文献
- ^ 「CSP: frame-ancestors」 . 2023年9月27日閲覧。
- ^ a b G. Rydstedt、E. Bursztein、D. Boneh、C. Jackson (2010). 「フレームバスティングの阻止:人気サイトにおけるクリックジャッキング脆弱性の調査」第3回Web 2.0セキュリティとプライバシーワークショップ、IEEE。
- ^ 「アーカイブコピー」 2013年6月6日時点のオリジナルよりアーカイブ。 2014年11月1日閲覧。
{{cite web}}: CS1 maint: アーカイブされたコピーをタイトルとして (リンク)