一、xss简介
XSS全称是Cross Site Scripting即跨站脚本,为了与层叠样式表Cascading Style Sheets,CSS)的缩写进行区分,将跨站脚本攻击缩写为XSS,其本质是攻击者在web页面插入恶意的script代码(这个代码可以是JS脚本、CSS样式或者其他意料之外的代码),当用户浏览该页面之时,嵌入其中的script代码会被执行,从而达到恶意攻击用户的目的。
二、xss原理
HTML是一种超文本标记语言,我们在浏览器上看到的页面都是HTML语言编写的,HTML中会有一些用JavaScript脚本嵌入其中,用来对页面进行特殊的处理,如果我们可以向浏览器插入一段JavaSvript脚本代码,那么用户浏览器会将其误认为是插入了HTML标签,这些脚本程序就将会在用户浏览器中执行。所以,当这些特殊字符没有被过滤或检查出现失误时,就将会产生XSS漏洞。
三、xss攻击类别
可以分为三类
- 反射型
- 存储型
- DOM型
1、反射型XSS
当发出请求时,XSS代码出现在URL中,作为输入提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。
流程图:

看一个例子:
这是一个存在xss的一个网页,那我们在输入框输入js脚本代码来测试是否执行我们的脚本。
#正常情况下我们会输入以下代码的其中一个
<script>alert(/xss/)</script> //提示框 弹窗
<script>confirm('xss')</script> //确认框 弹窗
<script>prompt('xss')</script> //输入框 弹窗
#这些代码简单,效果又明显

当我们点击test提交数据时,可以看到我们输入的js被执行弹出了提示框

通过URL可以看到,输入的值会被拼接在URL上当作参数传入后端,经过钩端的处理返回到页面,被浏览器解析,导致脚本执行。
源码:

特点:1、即时性。不经过服务器存储,直接通过 HTTP 的 GET 和 POST 请求就能完成一次攻击,拿到用户隐私数据;2、攻击者需要诱骗点击;3、反馈率低,所以较难发现和响应修复;4、盗取用户敏感保密信息。
2、存储型XSS
存储型XSS,又称持久型XSS,他和反射型XSS最大的不同就是,攻击脚本将被永久地存放在目标服务器端(数据库,内存,文件系统等),下次请求目标页面时不用再提交XSS代码。
流程:

看一个例子:

上面是一个存在xss漏洞的留言板,那么我们在留言板上留言一个js脚本并提交。

js脚本被执行了,此时还看不出和反射型的区别。但我们将页面关闭再打开,或者点到别的页面再点回来。

可以看到js代码再次执行了,留言列表也出现了,我们的js脚本存放再列表中,当我们进入页面时,浏览器会解析页面,列表中的数据也会被解析,那js脚本被解析就会执行。只要我们的js脚本没有被删除,只要有人访问就会执行,从而达到代码自动执行和持久性的效果。

**特点:**1、持久性,植入在数据库中;2、危害面广,甚至可以让用户机器变成 DDoS 攻击的肉鸡;3、 盗取用户敏感私密信息。
3、DOM型XSS
DOM,全称Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容、结构以及样式,DOM-XSS简单理解就是不与后台服务器产生数据交互,是一种通过DOM操作前端代码输出的时候产生的问题。
DOM中有很多对象,其中一些是用户可以操纵的,如URI ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞。
看一个例子:

结合前端与源码可以看到,当我们点击click me时会将我们输入的值会经过js脚本代码的处理,插入到id 为"dom"的标签中。可以看到只在前端完成,没有经过服务器后端。
四、防御手段
1、对输入和URL参数进行过滤(白名单和黑名单)
检查用户输入的数据中是否包含一些特殊字符,如<、>、’、“等,发现存在特殊字符,将这些特殊字符过滤或者编码。

2、HTML实体编码
字符串js编码转换成实体html编码的方法
3、对输出内容进行编码
在变量输出到HTML页面时,可以使用编码或转义的方式来防御XSS攻击。

2227

被折叠的 条评论
为什么被折叠?



