假设我们有一个允许输入一段降价作为消息正文的表单。然后该文本在 HTML 中呈现为另一个页面上的JSON :
<html>
<body>
<script type="text/javascript">
loadMessage({
name: 'John Doe',
message: '**Hello** World'
});
</script>
</body>
</html>
假装loadMessage
使用降价解析器(例如标记)并在运行时输出 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)。 '</' + 'script>'
为此利用 JSON 格式化程序 -在编写 JSON 时转换为。我们会保持源的完整——但也许这是一件坏事。
我们应该如何减轻这种攻击?