Defaults.Exposed › 修正 › クリックジャッキング対策(X-Frame-Options)
クリックジャッキング対策(X-Frame-Options) の直し方
他のウェブサイトがあなたのサイトをこっそり自分の中に読み込まないよう、ブラウザに指示する1行の設定です。これがないと、詐欺師があなたの本物のログイン済みページを偽ページの裏に隠し、顧客に意図しないクリック—支払いの承認、パスワード変更、アクセス権の付与—をさせられます。
あなたのビジネスにとっての結論: 詐欺師があなたのライブのウェブサイトを偽サイトの中に見えない形で包み込み、ログイン済みの顧客からお金やアカウントへのアクセスを盗めます。顧客にはあなたのサイトがやったように見えます。修正は無料で、開発者にとって15分ほどです。オフのまま放置するのは、犯罪者にも慎重な買い手にも数秒で見抜ける既知のギャップです。
これで失いかねないもの
- 詐欺師があなたの本物のログインや決済画面を無害そうなページの裏に隠し、顧客に気づかれず『振込』や設定変更を『確認』させます。顧客は攻撃者ではなくあなたを責めます。
- ログイン済みのアカウント領域が『当選しました—クリックして受け取る』ページの上に見えない形で読み込まれ、そのクリックが実際に顧客のアカウントの本物の変更を承認し、あなたが怒りのサポート電話に対応します。
- 見込み客のITチームが契約前に手早くセキュリティスキャンを行い、サイトが誰にでも埋め込めるのを見てリスクと指摘し、商談を止める・潰します。
- あなたのブランドが詐欺キャンペーンの餌になります。引っかかった顧客は『それを起こさせたサイトの会社』として記憶します。
- 監査人やサイバー保険のスキャンが、欠けているクリックジャッキング対策を基本的な衛生の不備として挙げます—直すのは安いのに、指摘されると恥ずかしいもの。
なぜ重要か。 これは無料で1行、数分で追加でき、ログイン済みの顧客を狙う一群の手口を封じる設定です。当社の採点では相応の点に値するウェブセキュリティ検査で高重大度と評価されます。欠けているヘッダーは、犯罪者が自動化し買い手が探す、既知で簡単に確認できる穴を残すからです。
これは何か、平易に言うと
誰かがあなたのウェブサイトを訪れるとき、ブラウザはあなたのサイトを他のウェブサイトの中に読み込むよう指示されることもあります—大きなページの中に埋め込まれた小さな窓のように。それは無害に聞こえ、実際そうであることもあります。しかし、それがクリックジャッキングと呼ばれる攻撃の仕組みです。
手口はこうです。詐欺師が自分のページを作り、その中にあなたの本物のウェブサイトを静かに読み込みます—見えないよう完全に透明にして。そして自分のコンテンツを上に重ねます。派手なボタン、『動画を再生』、『賞品を受け取る』など。顧客には攻撃者のページが見え、無害そうなボタンをクリックします。でもあなたの本物のサイトがカーソルの真下に見えない形で座っているため、クリックは実際にはあなたのページに着地し—支払いを確認し、パスワードを変え、アクセスを承認し、許可を受け入れます。顧客はあるものをクリックしたつもりが、信頼するサイトで実際には別のものをクリックしたのです。
クリックジャッキング対策は、ウェブサイトがすべての訪問者のブラウザに送る短い目に見えない指示で、実質的にこう言います:
「他のウェブサイトに私を自分の中に読み込ませないで。誰かが試みたら、拒否して。」
最新のブラウザは自動でこれに従います。オンにすれば、手口は単純に機能しません—埋め込まれたサイトのコピーが読み込みを拒否します。オフだと、あなたのサイトは詐欺の隠し層として使われる格好の的になり、引っかかった顧客はその一件を攻撃者ではなくあなたのブランドと結びつけます。
これが招きうる損失
これらは現実的で日常的な筋書きです。当社は実在の企業名を挙げることはありません。これらはギャップがどう使われるかの例示です。
-
見えない『確認』。 顧客がひとつのタブであなたのアカウントポータルにログインしています。彼らは(広告・メール・検索結果から)魅力的な何かを約束し大きな『続ける』ボタンを表示するページに着地します。そのボタンの下に隠れているのは、彼ら自身のログイン済みセッションから読み込まれた、あなたの本物の『振込を確認』や『メールを変更』の操作です。彼らは『続ける』をクリックし—知らずにあなたとの実際のアカウントの変更を承認します。彼らにも、あなたのサポートチームにも、彼らがあなたのサイトでやったように見えます。
-
設定の乗っ取り。 攻撃者があなたのアカウント設定ページをフレームし、無害なゲームやアンケートを上に重ねます。適切な場所での数クリックが、静かに設定をひっくり返します—攻撃者のメールを回復用アドレスに追加、アプリの許可の付与、セキュリティ警告の無効化など。アカウントは今や静かに侵害され、そのとき何もおかしく見えませんでした。
-
止まる商談。 大口顧客が契約前に標準のセキュリティ質問票を送ってきます。1行に、サイトがフレーミング対策(X-Frame-Options / CSP frame-ancestors)を設定しているか尋ねています。IT担当者は『いいえ』と答えるしかなく、無料で15分の設定—今や買い手の前で危険信号に見える—を慌てて直す間、調達が止まります。
-
ブランドを餌にするキャンペーン。 あなたの本物で信頼されたページが埋め込めるため、攻撃者はあなたのログインや決済を、より広いフィッシングキャンペーンの説得力ある層として使います。引っかかった顧客は、影の攻撃者ではなく『あなたのサイト』で詐欺に遭ったときとして記憶します。
-
監査の指摘。 保険会社のスキャン、またはセキュリティ態勢を見る監査人が、欠けているクリックジャッキング対策を指摘事項に挙げます。教科書的な基本衛生の項目で、指摘されると、簡単で無料の保護が整っていなかったことを示し—残りのセキュリティの評価に影を落とします。
一貫した筋書き:被害は、意図しないことをする実在のログイン済み顧客に降りかかり、攻撃者ではなくあなたの名前を背負います。
これの実体
ブラウザがウェブサイトにページを求めると、サーバーはページに加えて目に見えない『ヘッダー』—ブラウザが読むが訪問者は決して見ない追加の指示—を返します。クリックジャッキング対策はこれらのヘッダーを通じて配信されます。2つあり、当社の検査はどちらかがあれば合格します:
1. 古いヘッダー—X-Frame-Options:
X-Frame-Options: SAMEORIGIN
これは長年使われ広くサポートされた制御です。実用的な値は2つのうちひとつ:
SAMEORIGIN— 自分のサイトは自分のページを埋め込めるが、外部サイトはできない。ほぼ全員にとって安全な既定。DENY— 誰も(自分を含め)あなたのページを埋め込めない。自分のコンテンツをフレームしないサイトだけ使いましょう。
2. 最新のヘッダー—Content-Security-Policy frame-ancestors:
Content-Security-Policy: frame-ancestors 'self';
これは新しくより柔軟な制御で、現行の標準が指すものです。同じ仕事をしつつ、誰が埋め込めるかを正確に指定できます:
frame-ancestors 'self'—SAMEORIGINに相当。frame-ancestors 'none'—DENYに相当。frame-ancestors 'self' https://partner.example.com— 自分のサイトに加え、名指しした信頼するパートナー1つだけ、他は誰もなし。
『良い』状態とは
最強の構成は両方を使います。最新ブラウザ向けの(そして許可する埋め込み元を名指しする精度のための)frame-ancestorsと、古いクライアントのフォールバックとしてのX-Frame-Options: SAMEORIGINです。当社の検査はどちらか単独でも満たされますが、両方とも無料で同じ数分で済むので、両方を設定しない理由はありません。
開発者が知っておくべき重要な点:Content-Security-Policy-Report-Onlyヘッダーは何も強制しません—報告するだけです。クリックジャッキング対策を実際に効かせたいなら、report-onlyではなく強制するヘッダー(frame-ancestors付きの通常のContent-Security-Policy、またはX-Frame-Options)から来なければなりません。
修正方法(無料・約15分)
ウェブサイトを運用している人—IT担当、ウェブ開発者、ホスティングのサポート—にこの項を渡してください。修正は無料です。 1〜2個のレスポンスヘッダー、またはCDNのルールです。買うものはありません。
検査は、X-Frame-Optionsヘッダー(DENYかSAMEORIGINに設定)またはCSPのframe-ancestorsディレクティブのどちらかがあれば合格します。推奨の念には念をの構成は両方を追加します。
ステップ1 — どれだけ厳しくするか決める
- ほとんどの企業:
SAMEORIGIN/frame-ancestors 'self'。自分のサイトは動き続け、外部はブロックされます。 - サイトが自分のページを決して埋め込まないなら: 最大の締め付けに
DENY/frame-ancestors 'none'。 - 正規のパートナーが特定のページを埋め込む必要があるなら:
frame-ancestors 'self' https://partner.example.com;で明示的に名指しし、他は誰も入れません。
ステップ2 — ヘッダーを追加する(プラットフォームを選ぶ)
Nginx — serverブロック内:
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Content-Security-Policy "frame-ancestors 'self';" always;
Apache — mod_headersが有効であることを確認し、仮想ホストに:
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Content-Security-Policy "frame-ancestors 'self';"
Microsoft IIS — web.configの<customHeaders>内:
<add name="X-Frame-Options" value="SAMEORIGIN" />
<add name="Content-Security-Policy" value="frame-ancestors 'self';" />
Cloudflare(または同様のCDN): Rules → Transform Rules → Modify Response Header へ行き、すべてのレスポンスにX-Frame-OptionsをSAMEORIGIN、Content-Security-Policyをframe-ancestors 'self';に設定する2つのルールを追加します。サーバーへ直接アクセスできない場合、これが最も簡単な道です。
すでに別の理由でContent-Security-Policyを送っている場合: 2つ目のCSPヘッダーを作らず、既存のポリシーにframe-ancestorsを加えてください。CSPヘッダーが2つあると衝突しかねません。
サイトビルダー(Squarespace、Wix、Shopifyなど): これらのプラットフォームはしばしばフレーミング対策を設定してくれるので、何もせずすでに合格しているかもしれません。当社の検査が指摘したら、制御はたいていプラットフォームのセキュリティ設定にあるか、サイトの前にあるCDNで追加します。(注:Google WorkspaceとMicrosoft 365はあなたのメールを動かすもので、ウェブサイトではありません—このヘッダーは公開サイトが実際にある場所で設定し、Workspace/365の管理画面では設定しません。)
ステップ3 — 再読み込みして検証する
ウェブサーバーを再読み込みするかCDNルールを展開し、ライブサイトを読み込んでレスポンスヘッダーを確認します—ブラウザの開発者ツール → Networkタブ → ページのリクエストをクリック → Response Headers、または任意の無料ヘッダーチェックツール。ヘッダーがホームページだけでなく実際のページのレスポンスに出ることを確認し、検査を再実行します。
よくある間違い
- report-onlyのCSPを使い、守られていると思い込む。
Content-Security-Policy-Report-Onlyは違反を報告するだけで、何も強制しません。保護を効かせるには強制するヘッダーが必要です。 Content-Security-Policyヘッダーを2つ別々に設定する。 すでにCSPがあるなら、2つ目のポリシーを出すのではなくそれにframe-ancestorsを加えてください。衝突するCSPヘッダーは予期しない挙動を生みかねません。- 自分のサイトが自分のページを埋め込むのに
DENYを設定する。DENYはすべてのフレーミングをブロックし、自分のものも含みます。サイトのどこかが自分のiframeを使うなら、代わりにSAMEORIGIN/frame-ancestors 'self'を使ってください。さもないと自分のページを壊します。 - ホームページだけ守る。 クリックジャッキングで最も重要なのはログイン済みのページ—アカウント設定、決済確認、管理画面です。ヘッダーがトップだけでなくサイト全体に適用されることを確認してください。
- HTTPSや鍵マークがすでにカバーしていると思い込む。 暗号化とフレーミング対策は無関係です。完璧な証明書は、ページが埋め込まれるのを止める何もしません。
- 古い回避策に頼る。 『フレームバスティング』のJavaScript(フレームから脱出しようとするスクリプト)は信頼できず迂回されえます。ヘッダーが正しく、ブラウザが強制する修正です。
よくある質問
技術に詳しくありません。自分で対応できますか?
技術的な部分を自分でやる必要はありません。ウェブサイトのサーバーやCDNに追加する単一の設定で、どのウェブ開発者やIT業者も数分で追加できます。下の『修正方法』の項を渡してください—何を追加すべきか正確に書いてあります。修正は無料で、それが維持されているかの監視をご希望の場合のみ料金をいただきます。
これで自分のサイトや正規のパートナーがページを表示できなくなりませんか?
厳しくしすぎた場合だけです。一般的な設定('SAMEORIGIN'、または'frame-ancestors self')は、自分のウェブサイトが自分のページを通常どおり埋め込むのは許し、外部サイトだけをブロックします。正規のパートナーがあなたの特定の1ページを埋め込む必要がある場合、開発者はその単一の送信元を許しつつ他の全員をブロックできます。
小さな会社です。本当に誰かが狙いますか?
これらの攻撃は手作業ではなく自動ツールで一括実行されます。小さなサイトは、まさにこうした基本的な保護を欠いていることが多いので、しばしば狙われます。攻撃者はあなたが誰かを知る必要はなく、サイトが埋め込めればいいだけです。ギャップを閉じるのに費用はかかりません。
『良い』状態は実際どんなものですか?
X-Frame-OptionsヘッダーをSAMEORIGIN(またはDENY)に設定するか、frame-ancestorsディレクティブ付きのContent-Security-Policy—理想的には両方です。当社の検査はどちらかがあれば合格します。最新でより柔軟な制御はframe-ancestorsで、X-Frame-Optionsは一部の古いブラウザをカバーする古いヘッダーなので、念には念をの構成は両方を使います。
これはSSLの鍵マークやHTTPSと同じですか?
いいえ—まったく別のものから守ります。HTTPSは接続を暗号化し、転送中に誰も読めないようにします。クリックジャッキング対策は、そもそもあなたのページが他人のサイトの中に読み込まれるのを止めます。完璧な鍵マークを持っていてもクリックジャッキングに無防備でありえます。別々の検査で、両方が必要です。
直さないと評点が下がりますか?
はい。これは情報提供ではなく評点付きのウェブセキュリティ検査です。欠けているヘッダーは点を失い、高重大度と評価されます。ログイン済みの顧客を直接詐欺にさらすからです。最も安く取り戻せる点のひとつでもあります。ひとつの無料ヘッダー、開発者の15分ほどです。