WEB安全之XSS漏洞

跨站脚本攻击(Cross
Site Scripting)。这是一种将恶意Javascript代码插入到其他Web用户页面里执行以达到攻击目的的漏洞。自1996年诞生以来,如今已经历十多年的演化。由于和另一种网页技术-层叠样式表(Cascading Style Sheets,CSS)的缩写一样,为了防止混淆,故把原本的CSS简称为XSS。在各种WEB应用安全漏洞中,XSS跨站脚本攻击漏洞一直被OWASP(Open Web Application Security Project)组织评为十大应用安全之一。

流程

xss注入简单流程.png

以博客留言板为例:

用户一般都是按照正常的语言文字在留言板进行留言。假如有一个攻击者,别有用心,反其道而行之,留言不再是一段正常的文字,而是输入了一串JavaScript脚本,如

<script>alert("your are so fool")</script>

此时网页的结构则变成如下形式:

<html>
  <title>XSS TEST</title>
  <body>
        五楼:<script>alert("your are so fool")</script>
  </body>
</html>

一旦用户浏览留言板,此段JavaScript脚本变会被浏览器解析,返回给用户,造成XSS漏洞。这就是最简单形式的XSS漏洞。

常见的恶意脚本形式

针对XSS漏洞,一般比较常见的脚本形式如下:

1、利用XSS弹警告窗:

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

2、获取cookie形式:

<script>alert(document.cookie)</script>

3、嵌入其他网站:

<iframe src=http://baidu.com width=0 height=0></iframe>

4、XSS输入也可能是HTML代码段,如使网页不停刷新:

<meta http-equiv="refresh" content="0;">

危害

①网络钓鱼,包括盗取各类用户账号。

②窃取用户cookie资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操作。

③劫持用户(浏览器)会话,从而执行任意操作,例如进行非法转账,强制发表日志,发送电子邮件等。

④强制弹出广告页面,刷流量等。

⑤网页挂马。

⑥进行恶意操作,例如任意篡改页面信息,删除文章等。

⑦进行大量的客户端攻击,如DDOS攻击。

⑧获取客户端信息,例如用户的浏览历史,真实ip,开放端口等。

⑨控制受害者机器向其他网站发起攻击。

⑩结合其他漏洞进一步扩大攻击。

分类

xss根据攻击类型可分为如下三种形式:

1、反射型XSS

2、存储型XSS

3、DOM-based XSS

下面就具体的类型进行讲解。

反射型XSS

​ 反射型XSS也被称为非持久性XSS,是现在最容易出现的一种XSS漏洞。当用户访问一个带有XSS代码的URL请求时,服务器端接收数据后处理,然后把带有XSS代码的数据发送到浏览器,浏览器解析这段带有XSS代码的数据后,最终造成XSS漏洞。

反射型XSS.png,图片来源于互联网

​ 反射型XSS其基本思想就是依靠站点服务端返回脚本,在客户端触发执行从而发起Web攻击。例如,在搜索框中输入如下脚本:

<script>alert(0)</script>

点击搜索,页面弹出alert对话框。

存储型XSS

​ 存储型XSS又被称为持久性XSS,存储型XSS是最危险的一种跨站脚本。允许用户存储数据的WEB应用程序都可能会出现存储型XSS漏洞,当攻击者提交一段XSS代码后,被服务器端接收并存储,当再次访问页面时,这段XSS代码被程序读取响应给浏览器,造成XSS跨站攻击。

存储型XSS.png,图片来源于互联网

​ 与反射型不同的是,存储型XSS属于二次渲染的漏洞,它首先会被持久化,然后从持久化中读取到页面,被页面渲染产生。如新增一个用户,将用户名写成如下形式:

<script>alert(0)</script>

保存后,如果未对用户名进行过滤,第二次访问用户信息时,会弹出alert窗体。

DOM-based XSS

​ DOM的全称为Document Object Model,即文档对象模型,DOM通常用于代表在HTML、XHTML和XML中的对象。使用DOM可以允许程序和脚本动态地访问和更新文档的内容、结构和样式。

​ 通过JavaScript可以重构整个HTML页面,而要重构页面或者页面中的某个对象, JavaScript就需要知道HTML文档中所有元素的“位置”。而DOM为文档提供了结构化表示,并定义了如何通过脚本来访问文档结构。根据DOM规定,HTML文档中的每个成分都是一个节点。

​ JavaScript重构的HTML页面,如果此中包含了恶意的脚本,便会造成DOM-based XSS漏洞。这种类型的漏洞常见的方式如下:

document.write()
document.writeIn()
xxx.innerHTML = 
xxx.outerHTL = 
innerHTML.replace
document.attachEvent()
window.attachEvent()
document.location.replace()
document.location.assign()

防御

​ 不管反射型XSS也好,存储型XSS也罢,DOM-based XSS也包括其中,其本质问题就是让对方浏览器执行你插入的JavaScript脚本。所以对于防御措施,主要有以下几种:

1、永远不要信任前端传过来的参数值,要对其进行过滤过滤再过滤。示例代码如下:

private String cleanXSS(String value) {
        value = value.replaceAll("<", "&lt;").replaceAll(">", "&gt;")
        .replaceAll("\\(", "&#40;").replaceAll("\\)", "&#41;")
        .replaceAll("'", "&#39;")
        .replaceAll("\"", "&#34;")
        .replaceAll("eval\\((.*)\\)", "")
        .replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");
        return value;
    }

2、可采用合适的编码函数,如apache.commons.lang3.StringEscapeUtils中的escapeHtml4函数。

3、采用owasp推出的ESAPI接口,对字符进行转义,如:

ESAPI.encoder().encodeForHTML(name)

关于ESAPI后续文章将有介绍!

4、为Cookie加上HttpOnly标记。

以上便是对XSS漏洞的一些总结!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,490评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,581评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,830评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,957评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,974评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,754评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,464评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,847评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,995评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,137评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,819评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,482评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,023评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,149评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,409评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,086评论 2 355

推荐阅读更多精彩内容