XSS的攻击原理与防御原理

xss又称跨站脚本攻击,原称为css(Cross-Site Scripting),因为和层叠样式表(Cascading Style Sheets)重名,所以又称为xss(x一般有未知的含义,还有扩展的含义)。

XSS的攻击原理

xss攻击涉及到了攻击者,用户和web server。主要是利用了网站本身设计的不严谨性,攻击者通过对网页插入恶意的攻击脚本,导致当用户在浏览网页的时候,嵌入其中的攻击脚本就会被执行,从而达到恶意攻击用户的特殊目的。攻击者通过xss攻击,可以获取到用户的cookie,然后发送给攻击者想要攻击的网站,因为跨站了,所以也称为跨站脚本攻击。

XSS的分类

根据攻击的来源,xss攻击的分类主要分为:反射型xss、存储型xss和DOM型xss三种。

反射型xss

反射型xss,也叫“非持久型xss”。用户点击攻击链接,触发了恶意脚本,服务器解析后响应,在返回的响应内容中出现攻击者的xss代码,被浏览器执行。一来一去,xss攻击脚本被web server反射回来给浏览器执行,所以称为反射型xss。

反射型xss的攻击步骤:

1、攻击者构造出特殊的URL,其中包含恶意代码;

2、用户打开带有恶意代码的URL时,网站服务端将恶意代码从URL中取出,拼接在HTML中返回给浏览器;

3、用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行;

4、恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。

特点:

1、攻击脚本非持久性,没有保存在web server中,而是直接出现在了URL地址中;

2、反射型xss漏洞常见于通过URL传递参数的功能,如网站搜索、跳转等;

3、由于需要用户主动打开恶意的URL才能生效,攻击者往往会结合多种手段诱导用户点击。一般通过邮件、社交软件等方式直接发送攻击URL,通过用户的点击来达到攻击目的的。

POST的内容也可以触发反射型xss,只不过其触发条件比较苛刻,需要构造表单提交页面,并引导用户点击,所以非常少见。

存储型xss

存储型xss,也叫“持久型xss”,相比反射型xss,存储型xss是把恶意脚本保存到了web server中的,这种攻击具有较强的稳定性和持久性,危害性也更大。这样每一个访问特定网页的用户,都会受到攻击。

存储型xss的攻击步骤:

1、攻击者将恶意代码提交到目标网站的数据库中;

2、用户打开目标网站时,网站服务端将恶意代码从数据库取出,拼接在HTML中返回给浏览器;

3、用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行;

4、恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。

特点:

1、攻击脚本持久性,保存在web server中;

2、这种攻击常见于带有用户保存数据的网站功能,一般通过论坛发帖、商品评论、用户私信等功能(所有能够向web server输入内容的地方),将攻击脚本存储到web server中。

有时候反射型xss和存储型xss是同时使用的,比如:先通过对一个攻击url进行编码(来绕过xss filter),提交到web server(存储在web server中),然后用户在浏览页面时,如果点击该url,就会触发一个xss攻击。当然用户点击该url时,也可能会触发一个CSRF(Cross site request forgery)攻击。

DOM型xss

DOM(Document Object Model) --based 漏洞是基于文档对象模型的一种漏洞,通过修改页面的DOM节点而形成的xss漏洞。

DOM型xss的攻击步骤:

1、攻击者构造出特殊的URL,其中包含恶意代码。

2、用户打开带有恶意代码的URL。

3、用户浏览器接收到响应后解析执行,前端JavaScript取出URL中的恶意代码并执行。

4、恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。

DOM 型 XSS 跟前两种 XSS 的区别:DOM 型 XSS 攻击中,取出和执行恶意代码由浏览器端完成,属于前端 JavaScript 自身的安全漏洞,而其他两种 XSS 都属于服务端的安全漏洞。

特点:

1、攻击脚本不与服务端交互的,只与客户端上的js交互,攻击脚本放到了js中执行,然后显示出来;

2、DOM型xss也是一种反射型xss。

小结

反射型xss跟存储型xss的区别是:存储型xss非持久性,攻击脚本存在服务器里反射型xss持久性,攻击脚本存在URL里

DOM型xss跟前两种xss的区别:DOM型xss,是通过修改页面的DOM节点来形成xss的,取出和执行恶意代码由浏览器端完成,属于前端JavaScript自身的安全漏洞,而其他两种xss都属于服务端的安全漏洞

类型 存储区 插入点
存储型 XSS 后端数据库 HTML
反射型 XSS URL HTML
DOM型 XSS 后端数据库/前端存储/URL 前端 JavaScript

XSS漏洞的检测

xss探针

xss探针可检测出网站有没有对xss漏洞做最基础的防御。

在测试xss的位置写入代码,查看页面源码,看看哪些代码被过滤或者转义了。

'';!--"<XSS>=&{()}
xss语句

除了xss探针以外,还可以输入最简单的测试语句

<script>alert(/xss/)</script>

如果插入的语句原封不动的呈现在了浏览器中,那么说明:

  • 代码没有被过滤,存在xss;
  • 代码没有被执行,因为没有闭合类似textarea标签,可以查看下源码。
常用的xss检测语句
<script>alert(/xss/);</script>
<script>alert(/xss/)//
<script>alert("xss");;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值