引子:
我刚入行的时候做过一个小小的页面工具,其中有一个步骤是把一些代码输出到页面上,当时我用的是php做的,写了个for循环,读取每一行的内容,然后echo出来。但是我发现页面排版老是那么的乱,怎么缩进都没有了?有一些代码还显示不出来?这太让我纳闷了,于是问一个学长是怎么一回事,他说:“当然啦,你输出的内容被浏览器解释过后的样子就是这样子的了,比如说你的空格浏览器是不承认的,你要输出空格就得用nbsp; ……”这时我才反应过来:“哦,原来如此……”。那时我才知道,在html的输出上代码和内容还是得程序员自己去区分的。
XSS的非常简单的介绍
XSS(Cross-site scripting)漏洞最早可以追溯到1996年,那时电子商务才刚刚起步,估计那时候国内很少人会想象到今天出现的几个国内电子商务巨头淘宝、当当、亚马逊(卓越)。XSS的出现“得益”于JavaScript的出现,JavaScript的出现给网页的设计带来了无限惊喜,包括今天风行的AJAX(Asynschronous JavaScript and XML)。同时,这些元素又无限的扩充了今天的网络安全领域。
然而,时至今天,国内还有很多同行对XSS漏洞没有重视起来:
“反正XSS又不会窃取我的root权限……”
“切,让他把我的数据库down下来啊……”
2005年10月,国外知名网络社区MySpace出现了一个叫Samy的XSS蠕虫在24小时内感染了超过1百万个网页。而不久之前,百度也出现了XSS蠕虫。
于是大家终于对XSS漏洞的危害开始有更深层次的认识了。
不能忽视的XSS漏洞
现在很多同行都把注意力放在XSS蠕虫上面,开始注意到:
用户填写的资料输出的时候过滤了没有?
用户发的帖子中的特殊字符需要转义吗?
用户写的<img src=http://some_site/some.js />在页面加载的时候是呈现出一张“图片”吗?
……
但是很多人忽视了最常用的一个输入框---搜索框。很多公司对搜索框的输出过滤不严格,甚至完全不做过滤,以为搜索框不会出什么乱子的。其中包括一下大家都了解的电子商务公司:
-
淘宝
-
当当
-
亚马逊中国(前身是卓越网)
-
腾讯
其中前3家公司我所发现的搜索输入框XSS漏洞到我写这篇文章时( 2008-2-18