ClickJackingは、Webページを透明なIFRAMEに埋め込むことにより、攻撃者が制御するWebページ上の特定のコンテンツを無意識のうちにクリックする悪意のあるテクノロジーです。この攻撃を防ぐために、HTTPヘッダー情報を介してページがiframeにネストされるのを防ぐことができます。
PHPでは、 Header()関数を使用して、適切なHTTP応答ヘッダーを設定して防御を達成できます。
クリックジャック攻撃の原則は、ユーザーが表示できないインターフェイス要素をクリックして、ユーザーが知識なしにアクションを実行できるようにすることです。通常、攻撃者はIFRAMEを使用して、ターゲットWebサイトのページを自分のWebページにネストし、透明性またはその他の手段でページコンテンツをカバーするため、ユーザーは実際に操作するときに必要なアクションを実行します。
ページがiframesにネストされないようにする最良の方法は、X-Frame-Options応答ヘッダーを使用することです。このヘッダーは、現在のページをiframeでネストすることが許可されているかどうかをブラウザに伝えます。この方法を使用すると、クリックジャック攻撃を効果的に防ぐことができます。
PHPでは、HTTP応答ヘッダーをHeader()関数から送信できます。ページがiframeにネストされないようにするには、次のコードを使用できます。
<?php
// 設定 X-Frame-Options ページがネストされないようにします iframe 真ん中
header('X-Frame-Options: DENY');
// または、指定されたドメイン名の下にネストされたページのみを許可する場合,利用可能:
header('X-Frame-Options: ALLOW-FROM https://m66.net');
// ページ上の他のコンテンツの処理を続けます
?>
拒否:すべてのWebページは、iframeを介して現在のページをロードすることを禁止されています。
Sameorigin :同じソース(つまり、同じドメイン名)を持つページのみが、iframeを介して現在のページを読み込むことができます。
Allow-from URI :指定されたドメイン名がIFrameを介して現在のページをロードできるようにします。 Allow-FromオプションはFirefoxなどの一部のブラウザでは非推奨であるため、一般的に拒否またはSameoriginが推奨されることに注意してください。
以下は、他のサイトが現在のページをiframeにネストするのを防ぐために、PHPページにXフレームオプションヘッダーを設定する方法を示す実用的な例です。
<?php
// 防ぐ Clickjacking 攻撃
header('X-Frame-Options: DENY');
// 設定其他 HTTP 応答ヘッド
header('Content-Type: text/html; charset=UTF-8');
// ページコンテンツ
echo "<h1>これは安全なページです</h1>";
echo "<p>このページをネストすることはできません iframe 真ん中。</p>";
?>
X-Frame-Optionsは、クリックジャック攻撃を防ぐための効果的な方法ですが、それが唯一の防御ではありません。コンテンツセキュリティポリシー(CSP)を使用して、保護をさらに強化することもできます。たとえば、CSPヘッダーを設定することにより、ページがiframeにネストされることを明示的に禁止することにより:
<?php
// 使用 CSP ネスティングを禁止します
header("Content-Security-Policy: frame-ancestors 'none';");
// ページコンテンツ
echo "<h1>これは安全なページです</h1>";
?>
Frame-Ancestorsを「なし」に設定することにより、 Xフレームオプションよりも柔軟なiFrameでページを完全に無効にすることができます。
これにより、ページがIFRAMEにネストされないように効果的に防止し、クリックジャック攻撃を避けることができます。ニーズに応じて、 Xフレームオプションまたはコンテンツセキュリティポリシー(CSP)を使用して防御を達成することを選択できます。