本文へスキップ
>_ITDITDセキュリティ対策プラットフォーム

用語辞典

クリックジャッキングとは — 透明な罠で“見えないボタン”を押させる攻撃

クリックジャッキングは、本物のページを透明にして別サイトに重ね、利用者に“見えないボタン”をクリックさせる攻撃です。仕組みの図解と、本命の防御(CSP frame-ancestors・X-Frame-Options で自サイトを他サイトに埋め込ませない)を、攻撃手順を伏せて防御目線で解説します。

公開日 2026-06-10 更新日 2026-06-10 5分で読める

「自分のつもりで押したボタンが、実は裏の別ページのボタンだった」——それがクリックジャッキングです。仕組みと、確実な防ぎ方を解説します(攻撃手順は載せません)。

何が狙われるか

「1クリックで完了し、しかも価値のある操作」が標的です。

標的になりやすい操作なぜ狙われる
送金・購入の確定ワンクリックで金銭が動く
設定変更(公開範囲・連携許可)後で乗っ取りや情報取得につながる
OAuth/権限の「許可」ボタンアカウント連携を勝手に承認させられる
SNSのフォロー・いいね・投稿勝手な拡散・いいね稼ぎに悪用

なぜ成立するか(仕組み)

ブラウザは、別サイトを iframe で読み込んで重ねて表示できます。攻撃者はその iframe を透明(不透明度0)にし、利用者に見えるのは下に置いたニセUIだけ。利用者が「ニセのボタン」を押すと、座標的に真上に重なった本物のボタンが押されます。

攻撃者のページ「景品が当たりました!下のボタンを押す」
= 透明な iframe(本物の銀行/設定ページ)を重ねている
↓ 利用者は“見えているニセボタン”を押す
実際に押されるのは真上の本物の「実行」ボタン
↓ 本人のログイン状態で
送金・設定変更・許可が“本人の操作”として完了
攻撃者のページに本物サイトを透明に重ね、見えるのはニセUIだけ。クリックは透明な本物に吸い込まれる。

CSRF と似ていますが、CSRF が「裏でリクエストを送る」のに対し、クリックジャッキングは本物の画面を本人に操作させるため、ワンタイムトークン等のCSRF対策だけでは防げません。

防御:本命は「埋め込ませない」

1

CSP frame-ancestors を設定(最優先)

レスポンスヘッダに Content-Security-Policy: frame-ancestors 'self'(自サイトのみ枠化を許可)。第三者に埋め込ませる必要がなければ 'none' が最も安全。許可する相手がいる場合だけドメインを列挙。

2

X-Frame-Options も併用(後方互換)

古い環境向けに X-Frame-Options: DENY(または SAMEORIGIN)も付ける。新旧ブラウザ両対応の多層防御。

3

重要操作には“もう一段”を要求

送金・権限付与など致命的な操作は、再認証・確認ダイアログ・直前の意図確認を挟む。透明な重ねでは突破しづらくなる。

4

セッションCookieを SameSite に

SameSite=Lax/Strict で、別サイト起点の自動送信を抑える。クリックジャッキング単体には万能ではないが、関連する“別サイト起点の操作”全般を弱められる。

当サイトの視点:ヘッダ1行が一番効く。まず自分のサイトを測れ

クリックジャッキング対策は派手なコードではなく、レスポンスヘッダ1〜2行で土台を奪うのが最短です。フレームワークやリバースプロキシ(Caddy/nginx)で全ページに一括付与し、抜け漏れを無くすのが実戦的。自分のサイトに frame-ancestors が効いているかは、当サイトのツールのセキュリティヘッダ診断で確認できます。「設定したつもり」で抜けているのが一番多い事故です。

次に読む

よくある質問

Qクリックジャッキングで何をされる?
A

利用者が「自分のつもりで」押したクリックが、裏に重ねられた本物のページのボタンに当たります。ワンクリックでの送金・設定変更・権限付与・SNSのフォロー/いいね・同意ボタンなど、“1クリックで完了する重要操作”が悪用されます。パスワードを盗むのではなく、ログイン済みの利用者本人に操作させるのが特徴です。

Q一番の防御は?
A

『自分のサイトを他サイトの枠(iframe)に埋め込ませない』ことです。レスポンスヘッダで CSP の frame-ancestors を 'self'(または許可ドメインのみ)に設定し、後方互換のため X-Frame-Options: DENY も併用します。これで重ねる土台そのものを奪えます。

QJavaScriptのframe busting(枠抜け)だけで足りる?
A

不十分です。古い『自分がiframe内なら抜け出す』JSは回避手法が多く、JSが無効でも守れません。本命はサーバーのヘッダ(frame-ancestors / X-Frame-Options)で、ブラウザに埋め込みを拒否させることです。