9.2.3 漏洞防范
2025年09月26日
9.2.3 漏洞防范
由于XSS漏洞在不同浏览器下有不同的利用方式,特别是业务上有需求使用富文本编辑器的时候,防御起来就更加复杂,所以在XSS防御这块应该从多个方面入手,尽量减少XSS漏洞。
1.特殊字符HTML实体转码
一般的XSS漏洞都是因为没过滤特殊字符,导致可以通过注入单双引号以及尖括号等字符利用漏洞,比如一个图片标签<img src=“$_GET['a']”/>,则可以通过输入双引号来闭合第一个单引号利用漏洞,防御这类的XSS漏洞只需要过滤掉相关的特殊字符即可,特殊字符列表如下:
➢单引号(')
➢双引号(")
➢尖括号(<>)
➢反斜杠(\)
➢冒号(:)
➢and符(&)
➢#号(#)
还有两个问题,这些字符应该怎么过滤,什么时候过滤?为保证数据原始性,最好的过滤方式是在输出和二次调用的时候进行,如HTML实体一类的转码,防止脚本注入的问题。
2.标签事件属性黑白名单
上面我们提到过滤特殊字符来防止XSS漏洞,实际上即使过滤了也同样可能会被绕过,比如利用跟宽字节注入一样的方式来吃掉反斜杠,再利用标签的事件来执行js代码,面对这样的情况,我们还得加标签事件的黑名单或者白名单,这里更推荐用白名单的方式,实现规则可以直接用正则表达式来匹配,如果匹配到的事件不在白名单列表,就直接拦截掉,而不是替换为空。