返回信息流0. 题外话
@houlen 同学发来一个帖子“本论坛一大高危漏洞不知道有人发了没有 ”
好像起初也没有人关注,后来怎么就……就十大了。我第一次看到帖子的时候,没看到内容,还想着把它删了,没有关注的原因是:一是我最近没空,二是,版主大多被要求使用Telnet的方式登录;三是,我手机浏览时设置了不加载图片……所以我没感受到发生了什么。
直到今天@nuanyangyang 建议我删帖(放心,我肯定不会删帖的,如果被删了也不是我干的),我才注意到这个短小精悍的帖子。
有些同学在下面回复“求解释”,“求详解”,虽然本版主从来没有混过安全圈,但还是力所能及的做些简单的解释,没有看到现场,所以只能靠猜了。错了欢迎纠正,没说到的欢迎补充。
1. 发生了什么?
通过“右键-查看页面源代码”(或者,在FireFox/Chrome浏览器下用调试工具查看元素),你就会发现,那位楼主的头像的代码大概是这样的:
<img width="120px" height="120px" src="http://static.byr.cn/uploadFace/H/" onerror='alert(0)'">
看到那个 &qout; 这个东西了么,在HTML中,这是一个被转义的双引号",这是论坛修复之后的结果。
那么原来,这里没有被转义,就是这样的:
<img width="120px" height="120px" src="http://static.byr.cn/uploadFace/H/" onerror='alert(0)'">
这段代码 <img 表示这里是一个图片,width="120px" height="120px"表示这个图片的宽和高,src表示这个图片的地址,onerror=表示,当图像加载过程中发生错误时被触发。alert(0)是一个javascript函数,会弹个对话框,显示个0.
怎么会这样呢?呵呵,这就得问@houlen了。我猜大概就是在我们自定义头像那个框里,输入了这样一个字符串:
" onerror='alert(0)'
论坛代码使用这个文件名,拼接完整的图片的url路径时,发生了悲剧。里面有个双引号,和src="最前面的这个双引号闭合了,成为了完整的src属性的值,那后面呢?后面就单独成立一个独立的属性。就是img标签,被硬生生的多插入了一个onerror事件。这个事件连同处理这个事件的代码被一起插入了。
2. 什么是XSS?
这就是XSS(跨cross 站site 脚本script)。因为css在html领域有特别的含义,所以为了区别把cross缩成X了。虽然houlen并没有给我们演示“跨”站,但这里确实可以“跨”站,跨越浏览器对js必须同源的策略限制。
有什么危害呢?简单说,咱正常的操作:爬楼,回帖,换头像,发私信,都是通过一个个http请求完成的。而js就可以替你发起请求完成这一系列操作。想一下,有个坏人,把js代码插到了头像的地址的onerror事件上,而头像又一定会error,所以坏人的代码一定会被执行。so……坏人太坏了!
XSS在OWASP TOP 10 危险列表里,2007年排名第一,2010年排名第二,2013年目前暂居第三。呵呵,从未出三甲。OWASP给了这样一个简短的介绍:
跨站脚本是最普遍的web应用安全漏洞。当应用程序发送给浏览器的页面中包含用户提供的数据,而这些数据没有经过适当的验证或转义(escape),就会导致跨站脚本漏洞。有三种已知的跨站漏洞类型:1)存储式;2)反射式;3)基于DOM的XSS。
攻击者能在受害者的浏览器中执行脚本以劫持用户会话、破坏网站、插入恶意内容、重定向用户、使用恶意软件劫持用户浏览器等等。
3. 如何检测XSS?
OWASP说:大部分跨站脚本漏洞通过测试或代码分析很容易找到。
比如手动测试:在输入框里面写点<script>alert(1)</script>碰碰运气。
比如WEB安全扫描软件:AppScan,WebInspect
4. 开发过程中如何减少XSS风险
来自OWASP的建议:
a).最好的办法是根据数据将要置于的HTML上下文(包括主体、属性、JavaScript、CSS, 或URL)转义(escape) 所有的不可信数据。除非用户界面(UI) 框架已经提供转义,开发者需要在应用程序中提供转义(escaping)。更多关于数据转义的信息见OWASP XSS Prevention Cheat Sheet。
b).使用正面的或“白名单”的, 具有恰当的规范化和解码功能的输入验证方法同样会有助于防止跨站脚本。但由于很多应用程序在输入中需要特殊字符,这一方法不是完整的防护方法。这种验证方法需要尽可能地解码任何编码输入,同时在接受输入之前需要充分验证数据的长度、字符、格式、和任何商务规则。
简单的说,别信用户的输入,输入验证有效性,输出转义。
开发人员同样可以借助相关的工具,在开发或测试的过程中发现可能存在XSS的代码。一个是ratproxy,google的工具。对于PHP开发者,php有个扩展叫Taint,在发现用户输入被直接输出或者被保存的时候,会给出一个warning。
附:
Q:什么是白帽子行为准则?
A:大概就是nuanyangyang说的那样,尽量保证你发现的问题的影响尽可能的小,所以当你发现一个问题的时候,首先联系它的主人,等他或者帮他修好。
Q:为什么版主拒绝了删掉原帖的建议?
A:本版主以不删帖为己任,自认为不能一边咒骂那些随便删我们帖的人,又一边想着删掉自己觉得不爽的帖子。所有的删帖封禁规则已在置顶中标出。
Q:信安版好像没什么技术氛围?
A:我认为主要是版主的责任。版主没能引领技术讨论。所以有兴趣的同学可以去应个版主什么的。
这是一条镜像帖。来源:北邮人论坛 / security / #36373同步于 2013/5/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Security机器人发帖
关于XSS和“本论坛一大高危漏洞”
BookMoth
2013/5/23镜像同步15 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
你赶快去应版主额。。加油
【 在 firesun 的大作中提到: 】
: 我用这个做了一个跳转,原本访问我的资料会跳转到我自己的网站。。。。然后22号晚上6点多就有人开始试探我的网站。。。。。。。。。
: [upload=1][/upload]
安全这个坑也太大了。密码学已经是非常难的东西了,然而,还要有这么扎实的编程功底。。。密码学学的再好,如果编程功底不够扎实,还是一样被别人攻击。。。安全这条路到底怎么走好?安全大牛到底是密码学大牛?还是编程大牛?孰轻孰重?
@frip 哈哈0.0
【 在 wdjwxh 的大作中提到: 】
: 耶!钓鱼成功!
: 快,这个活交给你了,而且,快把上次那两个功能的界面做了,更上去·
[ema19][ema19][ema19][ema19][ema19][ema19]
【 在 wdjwxh 的大作中提到: 】
: 耶!钓鱼成功!
: 快,这个活交给你了,而且,快把上次那两个功能的界面做了,更上去·