xss攻击是什么?
XSS全称是Cross Site Scripting即跨站脚本,当目标网站目标用户浏览器渲染HTML文档的过程中,出现了不被预期的脚本指令并执行时,XSS就发生了。
作为一种HTML注入攻击,XSS攻击的核心思想就是在HTML页面中注入恶意代码,而XSS采用的注入方式是非常巧妙的。在XSS攻击中,一般有三个角色参与:攻击者、目标服务器、被攻击者的浏览器。
XSS攻击时一种HTML的注入攻击,它通过在浏览器页面注入恶意代码,并让这段代码成功执行,从而对用户的服务器进行攻击。
下面这段是一段简单的JavaScript代码,它的功能是弹出一个对话框显示用户的cookie信息,如果攻击者将这段代码注入到HTML页面中,当用户访问该页面时,这段代码就会被执行,从而显示用户浏览器的cookie信息
<script>
alert(document.cookie);
</script>
攻击类型
反射型XSS(非持久型XSS)
反射型XSS又称非持久型XSS。之所以称为反射型XSS,是因为这种攻击方式的注入代码是从目标服务器通过错误信息、搜索结果等等方式“反射”回来的:发出请求时,XSS代码出现在URL中,作为输入提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。这个过程像一次反射,故叫反射型XSS。 而称为非持久型XSS,则是因为这种攻击方式具有一次性,由于代码注入的是一个动态产生的页面而不是永久的页面,因此这种攻击方式只在点击链接的时候才产生作用。
非持久型 XSS 漏洞攻击的四大特点:
① 即时性。不经过服务器存储,直接通过 HTTP 的 GET 和 POST 请求就能完成一次攻击,拿到用户隐私数据;
②攻击者需要诱骗点击;
③反馈率低,所以较难发现和响应修复;
④盗取用户敏感保密信息。
反射型XSS是跟随客户端的请求到服务器,服务器收到后解析,然后XSS代码会跟随响应回到浏览器,最后被浏览器执行,这个过程像一个弧形的反射,所以被叫作反射型XSS,因为这种XSS往往是一次性的,所以又被叫作非持久性XSS,XSS注入后产生的链接也是一次性的,在点击后失效。
由于反射型XSS通过HTTP的get或post请求就能完成一次攻击,并且需要用户主动点击触发,所以反射型XSS比较隐蔽,难以发现和修复。
如下面的代码如果被包含在HTML页面,就会在返回时输出用户的名称:
<?php
echo "<p>hello,$_GET['user']</p>";
?>
存储型XSS
存储型XSS,又称持久型XSS,他和反射型XSS最大的不同就是,攻击脚本将被永久地存放在目标服务器端(数据库,内存,文件系统等),下次请求目标页面时不用再提交XSS代码。
一般存在于 Form 表单提交等交互功能,如发帖留言,提交文本信息等,黑客利用的 XSS 漏洞,将内容经正常功能提交进入数据库持久保存,当前端页面获得后端从数据库中读出的注入代码时,恰好将其渲染执行。
存储型XSS和反射型XSS不同点在于它的恶意代码会永久存储到目标服务器(数据库、内存或文件系统),不需要像反射型XSS用户重新请求时需要再次发送,它一般存在于表单编写的交互代码中。存储型XSS比起反射型XSS,它一般存在于用户受信任的网站中,隐蔽性更高,危害性更大。
如下图所示,因为攻击脚本被存储到服务器的数据库或文件中,导致用户访问页面内容时输入的数据会直接回显给XSS代码:
DOM-based 型XSS攻击
基于 DOM 的 XSS 攻击是指通过恶意脚本修改页面的 DOM 结构,是纯粹发生在客户端的攻击。DOM 型 XSS 攻击中,取出和执行恶意代码由浏览器端完成,属于前端 JavaScript 自身的安全漏洞。
DOM-based型XSS是一个发生在客户端的攻击,它通过恶意代码修改客户端页面的DOM结构达成攻击,与服务器没有任何关系,它属于前端JS自身的漏洞