0

メッセージ本文としてマークダウンの一部を入力できるフォームがあるとします。そのテキストは、HTML でJSONとして別のページにレンダリングされます。

<html>
   <body>
       <script type="text/javascript">
       loadMessage({
           name: 'John Doe',
           message: '**Hello** World'
       });
       </script>
   </body>
</html>

loadMessageマークダウン パーサー (例: marked ) を使用し、実行時に HTML を出力するふりをします。

悪意のあるユーザーがページでエラーを引き起こす可能性があるケースを特定しました:

<html>
   <body>
       <script type="text/javascript">
       loadMessage({
           name: 'John Doe',
           message: '</script>'
       });
       </script>
   </body>
</html>

ブラウザがスクリプト ブロックを閉じるため</script>Unexpected token ILLEGAL例外がスローされます。Marked はそのような攻撃をサニタイズできますが、この攻撃は JavaScript の実行前に行われます。

  1. 最初のフォームが送信されたときに、すべて<script>を削除します。</script>これは、多くのフレームワーク コードを更新することを意味します (ASP.NET MVC を使用するため、既定の ModelBinder を拡張する必要があります)。
  2. これには JSON フォーマッタを活用します。JSON を'</' + 'script>'書き込むときに変換します。ソースはそのままにしておくつもりですが、それは悪いことかもしれません。

このような攻撃をどのように軽減する必要がありますか?

4

1 に答える 1