一、XSS 是什么?
跨站脚本攻击(Cross-site scripting,XSS)是攻击者向网站注入恶意脚本,等待用户访问网站并自动运行恶意脚本发起攻击的过程。不同的脚本可以实现不同目的:
- 盗用cookie,获取敏感信息。
- 利用植入Flash,通过crossdomain权限设置进一步获取更高权限;或者利用Java等得到类似的操作。
- 利用iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻击)用户的身份执行一些管理动作,或执行一些一般的如发微博、加好友、发私信等操作。
- 利用可被攻击的域受到其他域信任的特点,以受信任来源的身份请求一些平时不允许的操作,如进行不当的投票活动。
- 在访问量极大的一些页面上的XSS可以攻击一些小型网站,实现DoS攻击的效果。
二、XSS 分为3类
1、存储型(持久型)
攻击者把恶意脚本注入服务器并存储起来,等待受害者请求此脚本并在浏览器中自动运行。
使用场景:攻击者在评论区提交带有恶意脚本的评论,如果服务器检查不出恶意脚本,那么此恶意评论会被存入服务器数据库,下一个用户访问时,评论会被自动获取并展示,其中恶意脚本也被自动运行了。
// 在评论区,直接把下面的内容提交,如果服务器不做检查,下面内容就被存入服务器数据库
2、反射型(非持久型)
通过用户点击恶意链接,获取用户已登录的会话cookie。
http://www.example.com/transfer?s=
3、DOM 型
在用户浏览的页面中直接注入代码。
实例:HTML中有个锚的功能,也就是通过
#id
来实现当页面的跳转。# 下面链接表示打开页面,并把 id 为 doc 这个元素滚到页面最上面 http://www.example.com/#doc # 把 doc 换成 脚本,再访问此页面,意味着脚本会被自动执行 http://www.example.com/# # 备注:此实例只是解释说明用,目前浏览器早就屏蔽了这样的漏洞。
三、怎么防止 XSS 攻击?
XSS 来源于用户提供的内容,只要过滤掉其中的恶意代码即可,Node.js 项目中推荐使用 xss
库来完成这个工作。
// 1、安装
npm install xss
// 2、使用
var xss = require('xss');
var html = xss('');
console.log(html);