我正在做一个类似网络应用的论坛。允许用户向服务器提交丰富的html文本,例如p标签,div标签等。为了保持格式,服务器将这些标签直接写回用户的浏览器(不用html编码)。因此,我必须进行潜在的危险脚本检查以避免XSS。任何JavaScript代码都应该是危险的,不允许。那么,如何检测它们或任何其他更好的解决方案?
危险示例1:
<script>alert('1')</script>
危险示例2:
<script src="..."></script>
危险示例3:
<a href="javascript:dangerousFunction();">click me</a>
答案 0 :(得分:0)
您确定有多少脚本样式? 如果您确定,可以将这些样式转换为正则表达式并推送数组,然后使用正则表达式匹配,然后再提交
答案 1 :(得分:0)
您的要求很简单:
<script>
代码,但请保留一些丰富的HTML代码。处理所有这些的正确方法是使用符合现代标准的HTML解析器,该解析器能够语法分析发送的丰富HTML的结构,识别发送的标签并发现属性中的原始值。事实上,正如其中一条评论提到的那样, sanitisation 是如何完成的。
有许多预先存在的HTML解析器,旨在针对XSS不安全的输入。例如,npm
库js-xss
似乎能够完全符合您的要求:
您甚至可以运行此server-side as a command line utility。
大多数语言已经存在类似的库,您应该彻底搜索首选语言的软件包存储库。或者,您可以从命令行直接从js-xss
启动子进程并收集结果。
Avoid using regular expressions to parse HTML naively - 虽然大多数HTML解析器最终都使用正则表达式,但是在正确地使用它们之后,它们以相当有限的方式对严格定义好的语法进行操作。
答案 2 :(得分:-3)
使用此正则表达式
<script([^'"]|"(\\.|[^"\\])*"|'(\\.|[^'\\])*')*?<\/script>
用于检测所有类型的<script>
代码
但我建议在沙盒模式下使用iframe来显示所有HTML代码,这样做可以防止javascript代码执行任何不良操作。
http://www.w3schools.com/tags/att_iframe_sandbox.asp
我希望这有帮助!