0Pricing
HTML Academy · レッスン

iframeのセキュリティ:クリックジャッキングとX-Frame-Options

X-Frame-OptionsとCSPでクリックジャッキング攻撃を防ぎます

「iframeのセキュリティ:クリックジャッキングとX-Frame-Options」はCoddyKit上の無料HTML Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはHTML Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 HTML Academyコースには全4レッスンが含まれています。

クリックジャッキングとは

クリックジャッキング(UIレッドレス攻撃)は、標的サイトを透明なiframeに埋め込み、おとりページの上に重ねます。ユーザーはおとりをクリックしているつもりでも、実際にはその下にある認証済みページをクリックするため、本人が知らないうちに標的サイト上で操作が実行されます。

クリックジャッキング攻撃の仕組み

攻撃者はvictim.comを透明なiframeに読み込み、「Click to win!」というボタンの上に配置します。ユーザーがクリックすると、実際にはvictim.comの「Delete Account」ボタンをクリックすることになります。victim.comのセッションCookieによって、ユーザー自身として認証された状態です。フィッシングは必要ありません。

X-Frame-Optionsヘッダー

X-Frame-Options: DENYは、ページがどのiframeにも読み込まれないようにします。X-Frame-Options: SAMEORIGINは、同じオリジンのページからのみiframeに読み込めるようにします。クリックジャッキングを防ぐため、認証が必要なすべてのページで、このヘッダーをサーバー側で設定してください。

Content-Security-Policyのframe-ancestors

Content-Security-Policy: frame-ancestors 'none'は、X-Frame-Options: DENYに代わる、より柔軟な現代的手段です。frame-ancestors 'self'はSAMEORIGINに相当します。frame-ancestorsでは、frame-ancestors https://trusted.example.comのように、信頼する特定のオリジンを許可することもできます。

JavaScriptによるフレームバスティング

従来のフレームバスティングでは、JavaScriptを使ってフレームから抜け出していました。しかし、sandbox属性によってフレームバスターのスクリプトがブロックされるため、簡単に無効化されます。必ずサーバー側のヘッダー(X-Frame-OptionsまたはCSPのframe-ancestors)を使用してください。JavaScriptによるフレームバスティングは信頼できません。

フレーミングを許可する場合

フレーミングが正当に必要となる例には、自分のコンテンツを自分のオリジンに埋め込む場合(SAMEORIGIN)や、特定のパートナーによるウィジェットの埋め込みを許可する場合(特定のオリジンを指定したframe-ancestors)があります。こうしたケースは許可し、それ以外はすべて拒否するようにポリシーを設計してください。

組み合わせて使用する方法

対応範囲を最大限に広げるため、X-Frame-Options(古いブラウザー向け)とCSPのframe-ancestors(最新のブラウザー向け)の両方を設定してください。両方が存在する場合、CSPをサポートするブラウザーではframe-ancestorsが優先されます。両方を送信することで、すべてのユーザーエージェントに対してクリックジャッキングを防止できます。

同一オリジンiframeのリスク

同一オリジンのiframeにもリスクがあります。埋め込まれたページに保存型XSSがあると、同一オリジンであるためparent.documentを通じて親ページにアクセスできる可能性があります。親ページへのアクセスが不要な同一オリジンiframeには、allow-same-originを指定しないsandboxを使用し、埋め込みコンテンツの脆弱性による被害を抑えてください。

保護のテスト

クリックジャッキング対策を検証するには、ブラウザーのネットワークタブで、レスポンスヘッダーにX-Frame-OptionsまたはCSPのframe-ancestorsが含まれていることを確認してください。securityheaders.comなどのツールでヘッダーを分析できます。サイトを指すiframeを含むテスト用HTMLページを作成し、読み込みに失敗することを確認してください。

サードパーティの埋め込み

サードパーティのコンテンツ(YouTube、Google Mapsなど)を埋め込む場合、あなたがフレーミングするサイトになります。埋め込むサービスが、自身のX-Frame-Optionsポリシーでフレーミングを許可していることを確認してください。フレーミングを拒否しているサイトを埋め込むことはできません。これは設計どおりの動作であり、埋め込まれるサービスのユーザーを保護します。

メタタグ内のCSP frame-ancestors

ほとんどのCSPディレクティブとは異なり、frame-ancestorsはHTTP-equivメタタグで設定できません。HTTPレスポンスヘッダーとして配信する必要があります。これにより、ブラウザーがメタタグを読み取る前に埋め込みHTMLを操作して、攻撃者が保護機能を削除することを防げます。

理解度チェック

JavaScriptによるフレームバスティングコードが、クリックジャッキング対策として信頼できないのはなぜですか。

要約

クリックジャッキングは、認証済みページを透明なiframeに埋め込み、クリックを乗っ取ります。対策として、サーバー側でX-Frame-Options: DENYまたはCSPのframe-ancestors: noneヘッダーを設定します。クロスブラウザー対応のため、両方を設定してください。JavaScriptによるフレームバスティングは信頼できないため、必ずHTTPヘッダーを使用してください。frame-ancestorsを使うと、X-Frame-Optionsではできない、信頼するオリジンのきめ細かな許可リストを設定できます。

よくある質問

「iframeのセキュリティ:クリックジャッキングとX-Frame-Options」レッスンは無料ですか?

はい。「iframeのセキュリティ:クリックジャッキングとX-Frame-Options」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、HTML Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 HTML Academyコースには全4レッスンが含まれています。

「iframeのセキュリティ:クリックジャッキングとX-Frame-Options」で何を学びますか?

X-Frame-OptionsとCSPでクリックジャッキング攻撃を防ぎます ブラウザで直接実行するハンズオンコードでHTML Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

HTML Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのHTML Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「iframeのセキュリティ:クリックジャッキングとX-Frame-Options」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このHTML Academyレッスンでコードを書いて実行できますか?

はい。すべてのHTML Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. iframe要素のsrcとsandbox
  2. iframeのセキュリティ:クリックジャッキングとX-Frame-Options
  3. embed要素とobject要素
  4. iframeの遅延読み込み
← HTML Academyに戻る