Webアプリケーションはユーザー入力を受け取り、エスケープやエンコードを行わずに、divまたはpタグでデータを表示します。したがって、<script>alert(1)</script>
を入力として提供すると、ソースはおおよそ次のようになります。
<div>
<p><script>alert(1)</script></p>
</div>
このことから、Webアプリケーションは脆弱であり、スクリプトが実行されると想定します。通常はそうですが、そうではない状況がいくつかあります(残念ながら、現時点では例を提供できません)。ペイロードはページに反映されても実行されません。
この振る舞いについてはどのような説明があるでしょうか?エスケープされていないスクリプトの実行を停止するXSS防止の他の形式はありますか?
私はこの謎について多くの考えられる説明を見ています:
Content-Security-Policy
_という名前の応答ヘッダーが見つかるかどうかを確認します。text
プロパティを設定した場合(またはjQuery .text()
メソッドを使用した場合)、タグはタグとして解釈されず、_>
_としてエンコードされません。これに該当するかどうかを確認するには、ソースの表示を使用して、実際のページソースでペイロードを見つけることができるかどうかを確認します。そこにない場合は、JSによってドキュメントに含まれている必要があります。