假设我们有一个允许输入降价部分作为消息正文的表单。 然后,该文本在另一页上以JSON格式呈现为HTML:

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

假设loadMessage使用markdown解析器(例如标记为 )并在运行时输出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>' 我们会保持原始状态不变-但这也许是一件坏事

我们应该如何减轻这种攻击?

===============>>#1 票数:1 已采纳

我个人可能会剥离类似于脚本标签的内容,因为这种方法将为Markdown解析器中的验证错误提供额外的安全保护。 但是您的里程可能会因您的应用程序而异。

如果确实需要编码,请参阅https://stackoverflow.com/a/236106/131903以获取合理的编码方法(即,使用\\ x3c替换小于号)。 这将起作用:

<html>
  <script>
    alert("1 \x3c/script> 2");
  </script>
</html>

  ask by TheCloudlessSky translate from so

未解决问题?本站智能推荐: