XSS系列之3种类型

simonbaker

一、概述

Cross-site scripting,简称XSS,跨站脚本攻击。
XSS是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在浏览网页的时候,就会受到影响。

二、反射型XSS - Reflected XSS

用户在页面的输入,经过http请求发送到服务端,服务端处理后,把用户输入原封不到返回到浏览器,浏览器也没做处理直接把用户输入显示到页面种。

1 示例:

代码

// 服务端(koa2)
router.get('/search', async (ctx, next) => {
  let req = ctx.request
  ctx.state = {
    title: 'xss',
    word: req.query.word
  }
  ctx.body = req.query.word ? req.query.word : ''
})

效果:
image

但当在URL输入<script>alert('xss')</script>的时候,就被攻击了。
image

一般多发生在服务端渲染(如上面的示例)以及浏览器端通过js直接渲染到页面($('#search').html(res.data))的情况

三、存储型XSS - Stored XSS

相比反射型,存储型则是把用户输入存储起来了。可想而知影响范围大很多。

这里就不演示了,有兴趣可看看著名的萨米XSS蠕虫攻击。

该蠕虫用JavaScript实现,利用储存型XSS漏洞传播。它在每个被感染的用户页面显示一行字串“but most of all, samy is my hero”,并将自己复制在该用户页面。当新的用户点击被感染的用户页面时,就会触发该程序在用户的浏览器中运行,导致蠕虫进一步传播,在该新用户主页上再度复制。在短短20小时内,从2005年10月4日发布起,超过一百万的用户都运行了该程序。这让该作者的账户在该社交网络上的关注量指数级增长,并让萨米蠕虫成为历史上传播速度最快的计算机病毒。

四、基于DOM的XSS - DOM Based XSS

反射型和存储型都必须经过服务端,但基于DOM的XSS则不用,直接在浏览器端攻击。

1 示例:

代码

<head>
    <meta charset="utf-8">
    <title>dom based xss</title>
</head>
<body>
    <script>
        document.write("正在访问的网站是: " + decodeURIComponent(location.href));
    </script>
</body>

效果:
image

但当在URL输入#<script>alert('xss')</script>的时候,就被攻击了。
image

这种就是直接在浏览器端发起的攻击,没经过服务端。

阅读 750
18 声望
1 粉丝
0 条评论
你知道吗?

18 声望
1 粉丝
文章目录
宣传栏