ひとことで言うと
クリックジャッキングとは、攻撃者が正規のWebページを透明なiframeで自分のページに重ね、ユーザーが意図しないボタンをクリックさせる手口です。たとえばSNSの「フォローする」ボタンを透明iframeで覆い、その下に「プレゼントに応募する」という偽ボタンを置くと、ユーザーは気づかずにフォロー操作を完了させてしまいます。
クリックジャッキングの成立条件は「攻撃対象ページがiframeに埋め込めること」です。逆に言えば、iframeへの埋め込みをHTTPレスポンスヘッダーで禁止するだけで大半の攻撃を防止できます。X-Frame-Options: DENYまたはContent-Security-Policy: frame-ancestors 'none' を設定することが標準的な対策です。
- 相手がログインなしで開ける状態か確認する
- PCとスマホで最低1回ずつ表示を確認する
- 内部情報・個人情報・不要な外部送信が残っていないか見る
- レビュー期限と修正時の差し替え方を決めておく
HTML共有で関係する場面
AI生成の静的HTMLを共有URLで配布したとき、そのURLが悪意ある第三者にiframe内に埋め込まれるケースが考えられます。共有先ページに決済ボタンやメールアドレス送信フォームが含まれていると、クリックジャッキングで意図しない操作を引き起こされる可能性があります。
一方、ギガサイト便のような限定URL型の共有サービスでは、URLを知る人だけがアクセスできるため、攻撃者が事前にURLを入手しなければiframeに埋め込むこと自体が困難です。ただし、URLを知っている内部関係者からの漏洩を想定するなら、配信サーバー側でX-Frame-Optionsヘッダーを付与する設定が有効です。
よくある誤解
「iframeを自分のページに使っていないから関係ない」という誤解が多く見られます。クリックジャッキングは攻撃者側がiframeを使うのであり、被害を受けるページ自体はiframeを使っていなくても対象になります。自分のページが他のサイトにiframe埋め込みされるかどうかが問題です。
「CSSで透明度をゼロにするテクニックは古いので今は使われない」という誤認もあります。モダンブラウザでもopacity:0やpointer-eventsを組み合わせた手法は有効で、2024年時点でも実際の攻撃に使われています。JavaScriptによるフレームバスターは迂回されることがあるため、HTTPヘッダーによる対策が確実です。
安全に使うための注意点
共有するHTMLファイルが重要な操作(メール送信・決済・個人情報の登録)を含む場合は、配信サーバーのレスポンスヘッダーにX-Frame-Options: DENYを追加することを最優先にしてください。Cloudflare Pagesなど多くのホスティングサービスはWorkers経由でヘッダーを追加できます。
HTMLファイル単体でフレームバスター(iframe内で開かれたことを検知してリダイレクトするJavaScript)を実装する方法もあります。ただしこれは完全ではないため、「フレームバスターがあるから安全」と過信せず、サーバー側のヘッダー設定と組み合わせて多層防御としてください。
共有URLを発行したら、受け取り手に「URLを第三者へ転送しないこと」と期限を明示することも有効です。URLが漏洩しなければ攻撃者はiframeに埋め込むURLを知ることができず、クリックジャッキングのリスクが実質的に下がります。
よくある質問
クリックジャッキングはスマートフォンでも発生しますか?
はい。モバイルブラウザでもiframe埋め込みは機能するため、タップ操作を誤誘導するタップジャッキングとしてスマートフォンでも成立します。PCと同様にX-Frame-Optionsヘッダーによる対策が有効です。
AI生成ページにクリックジャッキング対策を後から追加するにはどうすればよいですか?
HTMLファイル自体を書き換えるのではなく、配信サーバー側でX-Frame-Options: DENYヘッダーを付与するのが最も確実です。Cloudflare Workersを使えば既存HTMLを変更せずにヘッダーを追加できます。
リンク共有のみでiframeを使っていなければ対策は不要ですか?
不要ではありません。攻撃者が共有URLを入手してそのURLをiframeに埋め込む可能性があります。操作を含むページならヘッダー対策を施しておくことが推奨されます。