跨站脚本攻击(XSS, Cross Site Script)
(1)漏洞详情
通常指黑客通过“HTML注入”篡改了原有网页,插入恶意脚本,从用户客户端发起的一种攻击。
XSS按效果的不同可以分为3种:
1. 反射型XSS: 页面把攻击者输入的JS脚本
直接回显在页面或源码中,需要诱使用户点击才能成功;
2. 存储型XSS: XSS攻击代码被写入服务器中,由于用户可能会主动浏览被攻击页面,所以存储型XSS危害比较高;
3. Dom XSS: 修改页面的DOM节点形成XSS,严格来讲也可划为反射型XSS,需要具体情况具体分析。
攻击者常利用JS中的alert
函数进行漏洞PoC的演示,旨在证明可执行任意JS。
(2)漏洞危害 【高危-中危】
一般而言,利用XSS漏洞,攻击者实现将恶意js代码在用户的客户端执行,危害分两种:1、窃取用户包含cookie
在内的敏感信息;2、可能通过恶意js代码来实现加关注,发微博,点赞等攻击,如果控制发博内容能造成xss蠕虫攻击。
(3)修复建议
1、对xss漏洞点进行安全过滤或限制参数类型为“整型”,过滤方法可参考如下php函数对xss参数进行输出编码:
htmlentities()
//or
htmlspecialchars()
2、对重要的Cookie字段使用httponly
参数;
3、检查用户可控的输入。对所有的输入点进行严格的检查,过滤或拦截所有不符合当前语境的输入。由于无法预期所有可能的输出点语境,此种方法效果较差;
4、检查所有用户输入的输出点。因为XSS最终攻击是发生在输出点,因此需要分析出用户输入数据的所有输出点的环境,是输入在HTML标签中,还是HTML属性、script标签、事件、CSS位置中,针对不同的输出位置,制定不同的转义或过滤规则;
5、处理富文本。在文章、论坛等需要用到富文本的地方,需要特别注意富文本与XSS的区分,严格禁止所有的危险标签及“事件”,原则上应当使用白名单过滤标签、事件及属性。