我正在保存用户提交的HTML(在数据库中).我必须防止Javascript注入攻击.我见过的最有害的是style ="expression(...)"中的脚本.
除此之外,有效用户内容的公平金额将包含特殊字符和XML结构,所以我想如果可能的话,避免白名单的做法.(列出每个允许的HTML元素和属性).
Javascript攻击字符串的示例是:
1)
"你好,<dog>元素有一个<script> alert("bad!")</ script>问题......"
2)
"嗨,这个<b style ="width:表达式(警告('坏!'))">狗</ b>是黑色的."
有没有办法防止这样的Javascript,并保持其余的完整?
到目前为止,我唯一的解决方案是使用正则表达式来删除某些模式.它解决了案例1,但不是案例2.
编辑: 对不起,忘了提及环境 - 它本质上是MS堆栈:
我希望阻塞点成为ASP.NET层 - 任何人都可以制作错误的HTTP请求.
编辑2:
感谢大家的链接.假设我可以定义我的列表(他的内容将包含许多数学和编程结构,因此白名单会非常烦人)我仍然有一个问题:
什么样的解析器允许我删除"坏"部分?坏部分可能是一个完整的元素,但那么属于这些属性的脚本呢.我无法删除<a hrefs> willy-nilly.