前文已经介绍了XSS主要发生的前端场景,这里主要介绍下XSS漏洞的防护和测试。

1、字符转义

不可以信任用户提交的任何内容(用户名、昵称、描述等),首先代码里对用户输入的地方和变量都需要仔细检查长度和对

& --> & 

 < --> &lt; 

 > --> &gt; 

 " --> &quot; 

 ' --> &#x27; 

 / --> &#x2F;    

等字符做过滤;

其次任何内容写到页面之前都必须加以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