TL

クリックジャッキング

透明にした他サイトのフレームを重ね、ユーザーに意図しないクリックをさせる攻撃です。X-Frame-Options や CSP の frame-ancestors で防ぎます。

中級クリックジャッキングWebアプリブラウザ最終更新: 2026-06-06
TL;DR要点だけ先に
  • 1.クリックジャッキングは、透明にした標的サイトを罠ページに重ね、別物をクリックしたつもりで実際は標的を操作させる UI 偽装攻撃です。
  • 2.本人のクリックと権限で実行されるため、サーバ側は正規操作と区別できません。CSRF と似て「本人になりすませる」点が危険です。
  • 3.防御はサーバ側で『他サイトに埋め込ませない』と宣言すること。X-Frame-Options か、後継の CSP frame-ancestors で指定します。

どういう攻撃か

**クリックジャッキング(Clickjacking)**は、「UI 偽装(UI redress)」とも呼ばれる攻撃です。攻撃者は自分の罠ページの上に、標的サイトを iframe で重ねて透明にし、ユーザーには無害なボタン(例:「無料プレゼントを受け取る」)を見せます。

ユーザーがそのボタンを押したつもりでも、実際にクリックしているのは透明な標的サイトのボタンです。たとえば「退会する」「許可する」「送金する」といった、標的サイト上の危険な操作が、ユーザーの指で押されてしまいます。

ポイントは、攻撃者がスクリプトでデータを盗むわけではないことです。操作しているのは紛れもなくユーザー本人で、ユーザーのログイン状態と権限がそのまま使われます。だからサーバから見れば、これは「本人が自分の意思で押した正規のクリック」と区別がつきません。

<!-- 罠ページの構造(概念図)。fences 内なので < を書ける -->
<!-- 罠ボタンの真上に、標的サイトを透明な iframe で重ねている -->
<button>無料プレゼントを受け取る</button>
<iframe src="https://bank.example/settings"></iframe>
<!-- 透明化+位置合わせで、押すと iframe 内の危険ボタンが押される -->

なぜ成立してしまうのか

成立の鍵は、ブラウザが他サイトのページを iframe で読み込めてしまうこと、そして CSS でフレームを透明にしたり、ぴったり重ねたりできることです。攻撃者はこれらを組み合わせて、見た目と実際の操作対象をずらします。

主に次のような CSS の小細工が使われます。

  • opacity: 0 で標的フレームを完全に透明にする。
  • z-index で重なり順を操り、透明フレームを最前面に置く。
  • 位置の微調整で、見せかけのボタンと標的の危険ボタンを正確に重ねる。

ユーザーには罠ページの飾りだけが見え、その真上に乗った透明な標的サイトには気づきません。見えているものと、クリックが届く先が違う――この食い違いこそが攻撃の本質です。

CSRF との違いと関係

クリックジャッキングは CSRF と「本人の権限で意図しない操作をさせる」点が似ています。混同しやすいので違いを整理します。

観点クリックジャッキングCSRF
操作のきっかけユーザーが実際にクリックするクリック不要(自動送信でも成立)
悪用する性質他サイトに iframe で埋め込めることCookie が別サイト発でも自動で付くこと
主な対策X-Frame-Options / frame-ancestorsCSRF トークン / SameSite Cookie
見え方別の UI に見せかける画面上は何も起きていないように見える

両者は独立した攻撃で、それぞれ別の対策が要ります。CSRF トークンを入れていても、クリックジャッキングはユーザー自身が「本物の画面」を操作しているため、トークンも正しく送られてしまい防げません。逆もまた然りです。

CSRF 対策だけでは防げない

「CSRF トークンを入れたから操作系は安全」と考えるのは危険です。クリックジャッキングでは、ユーザーが本物の標的画面を(透明な状態で)操作しているため、ページに埋め込まれた CSRF トークンも正規の値として一緒に送信されます。フレーム埋め込みを止める対策は、CSRF 対策とは別建てで必要です。

防御:フレーム埋め込みを禁止する

最も確実な対策は、サーバが「このページを他サイトの iframe に埋め込ませない」と宣言することです。埋め込めなければ、重ねる土台そのものが作れません。方法は 2 つあります。

手段指定例備考
X-Frame-Options ヘッダDENY / SAMEORIGIN古くから広く対応。値は 1 つだけ
CSP の frame-ancestors'none' / 'self' / 許可元後継。複数オリジン許可など柔軟
HTTP/1.1 200 OK
X-Frame-Options: DENY
Content-Security-Policy: frame-ancestors 'none'
  • X-Frame-Options: DENY:いかなるサイトでも iframe 埋め込みを禁止。SAMEORIGIN なら自サイト内の埋め込みのみ許可。
  • Content-Security-Policy: frame-ancestorsCSP のディレクティブで、埋め込みを許す親オリジンを列挙できます。'none' で全面禁止、'self' で自サイトのみ、特定ドメインを並べて部分許可も可能。

frame-ancestorsX-Frame-Options の上位互換で、現代ブラウザではこちらが優先されます。一方、古い環境のために両方を併記する構成も実務ではよく使われます。

埋め込みを許可したい場合は明示的に

広告枠や決済ウィジェットなど、意図して他サイトに埋め込ませたいページもあります。その場合は frame-ancestors信頼するオリジンだけを列挙し、それ以外は弾くのが安全です。「とりあえず全許可」にすると、その隙を突かれます。許可リストは最小限にとどめ、不要になったら削るのが原則です。

まとめ

クリックジャッキングは、透明にした標的サイトを罠ページに重ね、ユーザーに別物をクリックしたつもりで標的を操作させるUI 偽装攻撃です。本人のクリックと権限で実行されるため、サーバ側は正規操作と区別できず、CSRF 対策だけでは防げません。

防御の本筋は、サーバ側で「他サイトに埋め込ませない」と宣言すること。X-Frame-Options か、後継の CSP frame-ancestors で指定します。これらはセキュリティヘッダによる多層防御の一部であり、攻撃面の全体像は OWASP Top 10 と合わせて押さえておくとよいでしょう。

セキュリティ Article

クリックジャッキングを実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

クリックジャッキング

比較で見る軸

難易度: intermediate / カテゴリ: セキュリティ / タグ数: 3

導入後に効く点

本人のクリックと権限で実行されるため、サーバ側は正規操作と区別できません。CSRF と似て「本人になりすませる」点が危険です。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
intermediate
カテゴリ
セキュリティ
タグ数
3

判断チェックリスト

  • 自社の用途が「クリックジャッキング / Webアプリ」に近いか確認する。
  • 強みである「クリックジャッキングは、透明にした標的サイトを罠ページに重ね、別物をクリックしたつもりで実際は標的を操作させる UI 偽装攻撃です。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

クリックジャッキングWebアプリブラウザクリックジャッキングWebアプリブラウザ
参考: 公式情報