web-dev-qa-db-ja.com

アプリケーションのコアPHPに対するクロスフレームスクリプト攻撃を回避する方法

クライアントの要件に従って、core-phpにある1つのWebアプリケーションを開発しました。私のクライアントは脆弱性テストを実施し、ハードレベルの脆弱性としてクロスフレームスクリプティングを発見しました。

この場合、それを避けるために何ができますか?利用できるより良い選択肢はありますか?

6
Shaggie

クロスフレームスクリプティングを使用すると、攻撃者は自分のWebサイトをフレーム/ iframeとして埋め込み、Webサイトのユーザーをスパイできます。

これにはソーシャルエンジニアリングが必要です。攻撃者は、誰かをだましてWebページにアクセスさせ、iframeに(たとえば)Webサイトへのログインを含めます。親Webサイトには、ログインをキャプチャするためのキーストロークを読み取るための悪意のあるJavaScriptも必要です。理論的には、ブラウザーには攻撃者がこれを実行できないようにする同じ起源のポリシーがありますが、実際にはこの攻撃は可能です ブラウザーのバグ が原因であることがよくあります。

防御:

  1. W3仕様に従って、コンテンツセキュリティポリシーを含める必要がありますframe-ancestorsヘッダーをHTTP応答に追加して、Webサイトがフレームに読み込まれないようにします。一部の古いブラウザはこのヘッダーをサポートしていない場合があるため、X-Frame-Optionsヘッダーに値DENY、SAMEORIGIN、またはALLOW-FROM uriを使用します。一部のブラウザーでは、X-Frame-OptionsがCSPフレーム祖先よりも優先されます。

  2. さらに、古いブラウザでWebサイトが「フレーム化」されるのを防ぐJavascriptの「フレームブレーカー」コードを追加することもできます。

これらのソリューションと詳細については、これについて説明します OWASPチートシート

4
Jedi

this および this から、問題に関する詳細情報を入手するのに最適な場所

@*Prevent Cross-Frame Scripting attacks*@
<script>
    (function (window) {
        if (window.location !== window.top.location)
            window.top.location = window.location;
    })(this);
</script>
1
Kurkula

このリンクを見つけた場所に関連する質問は見つかりませんが、ここに FrameBusting に関する論文と、それを実装する方法を示します。

カーネギーメロン大学のコリン・ジャクソンの協力を得て、スタンフォード大学のグスタフ・ライドシュテット、エリー・バーステイン、ダン・ボーネによって書かれました

これは紙の推奨事項です:

<style>
    body {display: none; }
</style>
<script>
    if (self === top) {
        document.getElementsByTagName("body")[0].style.display = 'block';
    } else {
        top.location = self.location
    }
</script>

display: none、これは非常に重要です。攻撃者はページの一部でJavaScriptを無効にすることができるためです。詳細については、ペーパーを参照してください。

0