简介
XSS全称跨站脚本(Cross Site Scripting),为避免与层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故缩写为XSS。这是一种将任意 Javascript 代码插入到其他Web用户页面里执行以达到攻击目的的漏洞。攻击者利用浏览器的动态展示数据功能,在HTML页面里嵌入恶意代码。当用户浏览改页时,这些潜入在HTML中的恶意代码会被执行,用户浏览器被攻击者控制,从而达到攻击者的特殊目的,如 cookie窃取等。
原理
形成XSS漏洞的主要原因是程序对输入和输出的控制不够严格导致“精心构造”的脚本输入后,在输到前端时被浏览器当作有效代码解析执行从而产生危害。
分类
反射型XSS
反射型 XSS,非持久化,需要欺骗用户自己去点击链接才能触发 XSS 代码,反射型 xss 攻击的方法,攻击者通过发送邮件或诱导等方法,将包含有 xss 恶意链接发送给目标用户,当目标用户访问该链接时,服务器将接收该用户的请求并进行处理,然后服务器把带有 xss 恶意脚本发送给目标用户的浏览器,浏览器解析这段带有 xss 代码的恶意脚本后,就会触发 xss 攻击;
存储型XSS
存储型 XSS,持久化,代码是存储在服务器中的数据库里,如在个人信息或发表文章等地方,可以插入代码,如果插入的数据没有过滤或过滤不严,那么这些恶意代码没有经过过滤将储存到数据库中,用户访问该页面的时候,没有进行编码过滤输出到浏览器上,就会触发代码执行,造成 xss 攻击;
DOM型XSS
DOM,全称 Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容、结构以及样式。 DOM 型 XSS 其实是一种特殊类型的反射型 XSS,它是基于 DOM 文档对象模型的一种漏洞。 在网站页面中有许多页面的元素,当页面到达浏览器时浏览器会为页面创建一个顶级的 Document object 文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。可以通过 JS 脚本对文档对象进行编辑从而修改页面的元素。也就是说,客户端的脚本程序可以通过 DOM 来动态修改页面内容,从客户端获取 DOM 中的数据并在本地执行。基于这个特性,就可以利用 JS 脚本来实现 XSS 漏洞的利用;
危害
1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号;
2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力 ;
3、盗窃企业重要的具有商业价值的资料 ;
4、非法转账 ;
5、强制发送电子邮件 ;
6、网站挂马 ;
7、控制受害者机器向其它网站发起攻击 ;
8、钓鱼
防御
- 输入检查
- 白名单
- 同时在客户端javascript中和服务端代码中实现相同的输入检查
- 输出检查
- HTML编码
- JS转义
- HttpOnly
- 浏览器禁止页面的javascript访问带有httponly属性的cookie。httponly解决的是XSS后的cookie攻击