メッセージ本文としてマークダウンの一部を入力できるフォームがあるとします。そのテキストは、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 の実行前に行われます。
- 最初のフォームが送信されたときに、すべて
<script>
を削除します。</script>
これは、多くのフレームワーク コードを更新することを意味します (ASP.NET MVC を使用するため、既定の ModelBinder を拡張する必要があります)。 - これには JSON フォーマッタを活用します。JSON を
'</' + 'script>'
書き込むときに変換します。ソースはそのままにしておくつもりですが、それは悪いことかもしれません。
このような攻撃をどのように軽減する必要がありますか?