当前位置:首页 >> 网络通讯 >> 网络安全 >> 内容

Web十大安全隐患之XSS跨站脚本

时间:2013/4/19 12:10:00 作者:平凡之路 来源:xuhantao.com 浏览:

 上次提到的是sql注入,算是较大的安全隐患,今天我们来介绍另外一种较为严重的安全隐患--XSS跨站脚本攻击。

       

       首先咱们来说什么是跨站脚本攻击。它的英文叫“CrossSite Scripting”,通俗点说就是攻击者向web页面里跨站的插入恶意html代码,那么当用户浏览该页的时候,嵌入到web中的html代码就会被执行。我们经常看到的重定向啊,以及一些钓鱼网站,大多数利用的就是这种技术。比如有个广告,里边网址是item.taobao.com/.xxxx的,是某个人在某论坛发的广告链接,你觉得东西很便宜啊,又是淘宝的,有保障,就点击进去了。其实呢,它会redirect到另一个攻击者自己的网站,你在上面通过他的接口付款时候,就会不小心被他洗劫一空。 涛涛电脑知识技巧

 

       介绍过了,其实老实讲,我自己对怎么攻击和攻击的原理也不是特别特别了解(大多数时候我们只要知道怎么测试出来有这个隐患和怎么防止就ok了)。不过大致原理咱们还是要了解的,后面是我节选自百度空间一篇文章,具体作者和链接我都忘记了。。是很久之前存下的,在这先感谢下。大家可以简单了解下其原理。

传统的跨站利用方式一般都是攻击者先构造一个跨站网页,然后在另一空间里放一个收集cookie的页面,接着结合其它技术让用户打开跨站页面以盗取用户的cookie,以便进一步的攻击。这种方式太过于落后,对于弊端大家可能都知道,因为即便你收集到了cookie你也未必能进一步渗透进去,多数的cookie里面的密码都是经过加密的,如果想要cookie欺骗的话,同样也要受到其它的条件的限约。而另一种思路,则从一定程度上解决上述的问题。比较成熟的方法是通过跨站构造一个表单,表单的内容则为利用程序的备份功能或者加管理员等功能得到一个高权限。下面将详细的介绍这种技术。

 

寻找跨站漏洞

如果有代码的话比较好办,我们主要看代码里对用户输入的地方和变量有没有做长度和对”<”,”>”,”;”,”’”等字符是否做过滤。还有要注意的是对于标签的闭合,像测试QQ群跨站漏洞的时候,你在标题处输入<script>alert(‘test’)</script>,代码是不会被执行的,因为在源代码里,有其它的标签未闭合,如少了一个</script>,这个时候,你只要闭合一个</script>,代码就会执行,如:你在标题处输入</script><script>alert(‘test’)</script>,这样就可以弹出一个test的框。

 

如何利用

跨站脚本(Cross-site scripting,XSS)漏洞是Web应用程序中最常见的漏洞之一。如果您的站点没有预防XSS漏洞的固定方法,那么就存在XSS漏洞。这个利用XSS漏洞的病毒之所以具有重要意义是因为,通常难以看到XSS漏洞的威胁,而该病毒则将其发挥得淋漓尽致。

 

这个利用XSS漏洞的蠕虫病毒的特别之处在于它能够自我传播。myspace.com上的一个用户希望自己能够在网站的友人列表上更“受欢迎”。但是该用户不是通过普通的方法来结交新朋友,而是在自己的个人信息中添加了一些代码,导致其他人在访问他的页面时,会不知不觉地利用XSS漏洞将他加为好友。更恶劣的是,它会修改这些人的个人信息,使其他人在访问这些被感染的个人信息时,也会被感染。由于这种呈指数传播的方式,这种病毒才很快就被发现。

 

很难预防站点中的XSS。因此一定要认真检查您的应用程序是否存在XSS漏洞。此外,WebLogic Server的encodeXSS()也可以有所帮助。可以试着针对所有牵涉到使用encodeXSS()或其他某个筛选方法的输出找出一种编码模式——找出对一种编码模式来说不正确的应用程序往往要比找出XSS漏洞要容易的多。更重要的是,不要认为,就因为XSS漏洞是一个常见问题,所以它危害不大。

 

之所以出现XSS漏洞有两个原因。首先,HTML没有明确区分代码和数据。无法确定指出“这个字符串表示的是数据”。您可以将其放入引号中,但是数据是否包含引号呢?……其次,程序在将用户数据发送回浏览器时没有进行有效的转义。这导致包含有(例如说)引号的数据被放入页面中,从而引发了问题。而AJAX要提供的好处是,它包含一个专用渠道XML链接,其中全是数据而没有代码。这样,就有可能让客户端AJAX引擎负责对字符串进行转义、检测不正确的值,等等。说是这么说,直到AJAX更为成熟(可能也更为标准化)之前,它只会导致错误的编程和安全漏洞。

 

XSS漏洞可能造成的后果包括窃取用户会话,窃取敏感信息,重写Web页面,重定向用户到钓鱼网站等,尤为严重的是,XSS漏洞可能使得攻击者能够安装XSS代理,从而攻击者能够观察到该网站上所有用户的行为,并能操控用户访问其他的恶意网站。

 

对于XSS漏洞,我们有两种常见的措施,第一种就是消除漏洞,简而言之就是在输出页面上不提供任何用户的输入信息;另外一种就是想办法来抵御这种漏洞,可以采用对所有用户的输入编码后再输出(可以用OWASP的ESAPI),也可以对所有用户输入进行“白名单”验证,另外,OWASP还提供了AntiSamy对HTML页面做优化以消除这个漏洞。

 

 

       上面这段既包含了原理,也说了防止手段。算是我看过文章里比较全面的。那后边我们进入最重点部分,那就是怎么去测试XSS跨站脚本攻击。

 

       大致上可以把XSS攻击分成三类,Stored XSS、Reflected XSS、Dom-Base XSS。我们逐一介绍下。

 

       首先是Stored XSS,就是存储式跨站攻击。这是最为厉害的一种攻击方式,也是测试起来相对容易的。存储式跨站攻击简单来说就是攻击者提交给网站的数据呢会提交并永久保存到服务器的数据库或者是文件系统等其他地方,之后不做任何编码操作就会显示在web页面上。貌似说的不是很清楚,我们可以举个例子来说:

 

       比如说一个社交网站或其他可以给在网站中留言的地方,事实上呢,我们在可以留言的地方写入一段代码:

1.<script>alert(documents.cookie)</script>

 

共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
  • 徐汉涛(www.xuhantao.com) © 2024 版权所有 All Rights Reserved.
  • 部分内容来自网络,如有侵权请联系站长尽快处理 站长QQ:965898558(广告及站内业务受理) 网站备案号:蒙ICP备15000590号-1