用語辞典
クリックジャッキングとは — 透明な罠で“見えないボタン”を押させる攻撃
クリックジャッキングは、本物のページを透明にして別サイトに重ね、利用者に“見えないボタン”をクリックさせる攻撃です。仕組みの図解と、本命の防御(CSP frame-ancestors・X-Frame-Options で自サイトを他サイトに埋め込ませない)を、攻撃手順を伏せて防御目線で解説します。
「自分のつもりで押したボタンが、実は裏の別ページのボタンだった」——それがクリックジャッキングです。仕組みと、確実な防ぎ方を解説します(攻撃手順は載せません)。
何が狙われるか
「1クリックで完了し、しかも価値のある操作」が標的です。
| 標的になりやすい操作 | なぜ狙われる |
|---|---|
| 送金・購入の確定 | ワンクリックで金銭が動く |
| 設定変更(公開範囲・連携許可) | 後で乗っ取りや情報取得につながる |
| OAuth/権限の「許可」ボタン | アカウント連携を勝手に承認させられる |
| SNSのフォロー・いいね・投稿 | 勝手な拡散・いいね稼ぎに悪用 |
なぜ成立するか(仕組み)
ブラウザは、別サイトを iframe で読み込んで重ねて表示できます。攻撃者はその iframe を透明(不透明度0)にし、利用者に見えるのは下に置いたニセUIだけ。利用者が「ニセのボタン」を押すと、座標的に真上に重なった本物のボタンが押されます。
CSRF と似ていますが、CSRF が「裏でリクエストを送る」のに対し、クリックジャッキングは本物の画面を本人に操作させるため、ワンタイムトークン等のCSRF対策だけでは防げません。
防御:本命は「埋め込ませない」
CSP frame-ancestors を設定(最優先)
レスポンスヘッダに Content-Security-Policy: frame-ancestors 'self'(自サイトのみ枠化を許可)。第三者に埋め込ませる必要がなければ 'none' が最も安全。許可する相手がいる場合だけドメインを列挙。
X-Frame-Options も併用(後方互換)
古い環境向けに X-Frame-Options: DENY(または SAMEORIGIN)も付ける。新旧ブラウザ両対応の多層防御。
重要操作には“もう一段”を要求
送金・権限付与など致命的な操作は、再認証・確認ダイアログ・直前の意図確認を挟む。透明な重ねでは突破しづらくなる。
セッションCookieを SameSite に
SameSite=Lax/Strict で、別サイト起点の自動送信を抑える。クリックジャッキング単体には万能ではないが、関連する“別サイト起点の操作”全般を弱められる。
当サイトの視点:ヘッダ1行が一番効く。まず自分のサイトを測れ
クリックジャッキング対策は派手なコードではなく、レスポンスヘッダ1〜2行で土台を奪うのが最短です。フレームワークやリバースプロキシ(Caddy/nginx)で全ページに一括付与し、抜け漏れを無くすのが実戦的。自分のサイトに frame-ancestors が効いているかは、当サイトのツールのセキュリティヘッダ診断で確認できます。「設定したつもり」で抜けているのが一番多い事故です。
次に読む
- 用語:CSRF とは / XSS とは
- 確認:無料セキュリティツール(セキュリティヘッダ診断)
よくある質問
Qクリックジャッキングで何をされる?
利用者が「自分のつもりで」押したクリックが、裏に重ねられた本物のページのボタンに当たります。ワンクリックでの送金・設定変更・権限付与・SNSのフォロー/いいね・同意ボタンなど、“1クリックで完了する重要操作”が悪用されます。パスワードを盗むのではなく、ログイン済みの利用者本人に操作させるのが特徴です。
Q一番の防御は?
『自分のサイトを他サイトの枠(iframe)に埋め込ませない』ことです。レスポンスヘッダで CSP の frame-ancestors を 'self'(または許可ドメインのみ)に設定し、後方互換のため X-Frame-Options: DENY も併用します。これで重ねる土台そのものを奪えます。
QJavaScriptのframe busting(枠抜け)だけで足りる?
不十分です。古い『自分がiframe内なら抜け出す』JSは回避手法が多く、JSが無効でも守れません。本命はサーバーのヘッダ(frame-ancestors / X-Frame-Options)で、ブラウザに埋め込みを拒否させることです。