クライアントの要件に従って、core-phpにある1つのWebアプリケーションを開発しました。私のクライアントは脆弱性テストを実施し、ハードレベルの脆弱性としてクロスフレームスクリプティングを発見しました。
この場合、それを避けるために何ができますか?利用できるより良い選択肢はありますか?
クロスフレームスクリプティングを使用すると、攻撃者は自分のWebサイトをフレーム/ iframeとして埋め込み、Webサイトのユーザーをスパイできます。
これにはソーシャルエンジニアリングが必要です。攻撃者は、誰かをだましてWebページにアクセスさせ、iframeに(たとえば)Webサイトへのログインを含めます。親Webサイトには、ログインをキャプチャするためのキーストロークを読み取るための悪意のあるJavaScriptも必要です。理論的には、ブラウザーには攻撃者がこれを実行できないようにする同じ起源のポリシーがありますが、実際にはこの攻撃は可能です ブラウザーのバグ が原因であることがよくあります。
防御:
W3仕様に従って、コンテンツセキュリティポリシーを含める必要がありますframe-ancestors
ヘッダーをHTTP応答に追加して、Webサイトがフレームに読み込まれないようにします。一部の古いブラウザはこのヘッダーをサポートしていない場合があるため、X-Frame-Optionsヘッダーに値DENY、SAMEORIGIN、またはALLOW-FROM uriを使用します。一部のブラウザーでは、X-Frame-OptionsがCSPフレーム祖先よりも優先されます。
さらに、古いブラウザでWebサイトが「フレーム化」されるのを防ぐJavascriptの「フレームブレーカー」コードを追加することもできます。
これらのソリューションと詳細については、これについて説明します OWASPチートシート 。
このリンクを見つけた場所に関連する質問は見つかりませんが、ここに 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を無効にすることができるためです。詳細については、ペーパーを参照してください。