前文已经介绍了XSS主要发生的前端场景,这里主要介绍下XSS漏洞的防护和测试。
1、字符转义
不可以信任用户提交的任何内容(用户名、昵称、描述等),首先代码里对用户输入的地方和变量都需要仔细检查长度和对
& --> &
< --> <
> --> >
" --> "
' --> '
/ --> /
等字符做过滤;
其次任何内容写到页面之前都必须加以encode,避免不小心把html tag 弄出来。这一个层面做好,至少可以堵住超过一半的XSS 攻击。
测试项:
提交包含“&、<、 > 、"、 '、/”的内容,观察数据库保存时是否做了转义,H5显示内容时是否做了保护。
2、Cookies保护
XSS漏洞的主要攻击目标是获取用户Cookie。因此在Cookie层面需要注意:
a)避免直接在cookie 中泄露用户隐私,例如email、密码等等。
b) 通过使cookie 和系统ip 绑定来降低cookie 泄露后的危险。这样攻击者得到的cookie 没有实际价值,不可能拿来重放。
c) 设置cookie HttpOnly属性,避免通过js方式读取Cookie
response.setHeader(
"Set-Cookie"
, "cookiename=value;
Path=/;Domain=domainvalue;Max-Age=seconds;HTTPOnly");
测试项:
测试cookie重放,摸清后台对cookie的保护程度,根据产品防护需求决定是否需要加强防护。
3、检查refer
检查http refer 是否来自预料中的url。
4、增加二次验证(业务层面)
不要完全信任cookie or token验证,在重要的操作添加二次验证。
附:XSS测试
XssSniper 是360公司出品的一款XSS漏洞发现插件,在chrome中安装并使用这款插件。插件的说明文档:https://0kee.360.cn/domXss/
https://mp.weixin.qq.com/s/5grCam2KF_N4wSucu67BoA