Angularでアプリを構築して、厳格なコンテキストエスケープ障害を伴う脆弱性を実証します。このアプリはそれを無効にし、サイトでxSS攻撃を実行できるようにします。
XSSの脆弱性は、攻撃者が悪意のあるデータをWebアプリケーションに挿入するインジェクションの脆弱性です。悪意のある挿入データは、ブラウザによってピックアップされ、データがコードとして解釈されます。これにより、攻撃者からの注入されたペイロードが正当なアプリケーションコードとして実行され、攻撃者がユーザーのブラウザで実行されているアプリケーションを完全に制御できます。

以下のコードの例は、XSSの脆弱性と攻撃の教科書の例を示しています。

jQueryアプリケーションにおけるDOM-XSSの脆弱性

<div id = "messagecontainer"> </div>
<スクリプト>
...
$（ "＃mesageContainer"）。append（mymessage）;
...
</script>
JavaScriptペイロードを含む悪意のあるメッセージ

こんにちはジョン！<スクリプト>アラート（「隠れて探してみよう！」）</script>
このデータがページに挿入された場合、ブラウザはメッセージ内のスクリプトを実行し、アラートダイアログをトリガーします。ここでの例は、Alert（）関数を呼び出します。これは、おそらくXSS攻撃の最も危険な効果ではありません。間違いを犯さないでください。現実には、攻撃者はページから機密データを盗み、ユーザー入力をキャプチャしてパスワードまたはクレジットカード情報を盗み、正当なアプリケーション自体がそれらを送信するかのようにサーバーにリクエストを送信することさえできます。攻撃者がXSSの脆弱性を活用することに成功したら、ブラウザ内のアプリケーションの実行環境全体を妥協することを検討する必要があります。

XSS攻撃に対する最良の防御は、ブラウザがデータをコードとして表示しないようにすることです。それを達成するための一般的なアプローチは、コンテキストに敏感な出力エンコーディングを適用することです。コンテキストに敏感な出力エンコーディングにより、データがページに表示されるコンテキストに対してデータがエンコードされるようになります。エンコーディング中、潜在的に危険なキャラクターは無害な対応物に翻訳されます。その翻訳のため、ブラウザはこれらの文字をコードの代わりにデータと見なし、混乱を回避し、攻撃を防ぎます。

以下は、悪意のあるペイロードを含むデータにコンテキストに敏感な出力エンコードを適用する効果の例です。

JavaScriptペイロードを含む悪意のあるメッセージですが、XSSを回避するために適切にエンコードされています

こんにちはジョン！＆lt;スクリプト＆gt; alert（ "Hide and Seekを再生しましょう！"）＆lt;/script＆gt;
ご覧のとおり、ブラウザは＆lt;をレンダリングするように指示されました。そして＆gt;<and>文字を表示するHTMLコード。これは明らかにデータであるため、ブラウザはコードのデータを混同しません。