web-dev-qa-db-ja.com

divまたはpタグでエスケープされていないデータが、悪用できない

Webアプリケーションはユーザー入力を受け取り、エスケープやエンコードを行わずに、divまたはpタグでデータを表示します。したがって、<script>alert(1)</script>を入力として提供すると、ソースはおおよそ次のようになります。

<div>
  <p><script>alert(1)</script></p>
</div>

このことから、Webアプリケーションは脆弱であり、スクリプトが実行されると想定します。通常はそうですが、そうではない状況がいくつかあります(残念ながら、現時点では例を提供できません)。ペイロードはページに反映されても実行されません。

この振る舞いについてはどのような説明があるでしょうか?エスケープされていないスクリプトの実行を停止するXSS防止の他の形式はありますか?

2
SaAtomic

私はこの謎について多くの考えられる説明を見ています:

  • XSS保護機能が組み込まれたブラウザーは、コードの実行を停止しました。ただし、この場合、ペイロードがドキュメントに反映されるかどうかはわかりません。 (= Conor Mancone によるとChromeペイロードはソースに反映されますが、ビューを選択すると赤で強調表示されますソース。)
  • インラインスクリプトの実行を停止する コンテンツセキュリティポリシー があります。開発者コンソールを起動し、ネットワークタブに移動して、_Content-Security-Policy_という名前の応答ヘッダーが見つかるかどうかを確認します。
  • コンテンツはJSを使用してドキュメントに挿入されます。 DOM要素のtextプロパティを設定した場合(またはjQuery .text()メソッドを使用した場合)、タグはタグとして解釈されず、_&gt;_としてエンコードされません。これに該当するかどうかを確認するには、ソースの表示を使用して、実際のページソースでペイロードを見つけることができるかどうかを確認します。そこにない場合は、JSによってドキュメントに含まれている必要があります。
6
Anders