|
由于使用了较短的URL把冗长的URL隐藏了起来,这样就更容易获取人们(甚至一些老道的计算机用户)的信任,从而单击恶意链接,例如,对于下面这个容易露馅的HTML注入:
http://search.engine.com/search?p=
我们可以把它映射成一个单独的URL,如下所示:
http://tinyurl.com/2optv9
目前,就算是警惕性很高的计算机用户也很少有人知道类似的TinyURL的提供URL缩短服务的站点。这样,我们可以通过不太流行的提供URL缩短技术的Web应用程序获取更多有经验的计算机用户的信任,从而使他们去毫无疑虑的点击我们的链接;此外,我们也可以创建自己的web页面,并在其中放入下列内容:
注意,document.location的字符串中的标签在上述JavaScript被执行之前是作为HTML出现的。对于POST方式的HTML注入,您可以编写下面的代码:
〈html〉 〈body〉 〈!-- something distracting like a cute kitten --〉 〈img src=cuteKitten.jpg〉 〈!-- and some HTML injection --〉 〈form action="http://search.engine.com/search" method="POST" name="evilForm"〉 〈input type="hidden" name="p" value="〈script〉a_lert(1)〈/script〉"〉 〈/form〉 〈script〉 document.evilForm.submit() 〈/script〉 〈/body〉 〈/html〉
现在,把上述代码放到您自己的Web站点或者blog中——如果没有的话,现在有许多免费的Web站点以及blog托管站点可用。 一种不错的隐蔽技术是滥用IE的MIME类型不匹配问题。例如,创建一个文本文件,将其命名为cuteKitten.jpg,然后放入下列内容:
〈iframe style="display:none" src="http://search.engine.com/search?p=〈script〉a_lert(1)"〉〈/iframe〉 〈img src="someCuteKitten.jpg"〉
上载cuteKitten.jpg,例如放到http://somwhere.com/cuteKitten.jpg。当用户点击该链接时,IE会认出cuteKitten.jpg根本就不是一张图像,所以它继而将其作为HTML进行解释。这样在显示图像someCuteKitten.jpg的时候实际上会在后台利用一个注入的HTML代码。
最后,攻击者只要注册一个听起来很正规的域名并且将该html注入寄放在该域名中即可。例如,googlesecured.com就是一个看上去很真可信的域名。
八、促使用户单击注入的HTML代码
利用“免费色情图片”以及“伟哥甩卖”来引诱别人已经成为过去,现在,攻击者通常会促使用户去做一些普通大众经常做的事情,诸如单击一个新闻链接、欣赏一副可爱的小猫的图片等等,当然使用的方法在前面我们已经说过了。
例如,快到情人节了,大多数年轻人都希望给爱人一个惊喜。攻击者就会考虑利用“阅读本文以了解如何您的爱人一个与众不同的情人节”之类的文字来诱惑用户单击链接。借助于XSS蠕虫,如果人们看到这封邮件来自其好友的话,那么人们会毫不犹豫地点击它。
然而,攻击者放入的文字越多,越容易引起潜在受害者的疑虑。现今,最有效的信件应当只发给潜在的受害者一个链接,而根本不附加任何文字。好奇是人类的本性,在这种强烈的本能的驱使下,点击该链接将大有人在。
至此,攻击手法的介绍已经告一段落,下面开始简要介绍针对跨站脚本攻击的防御措施。
九、防御跨站点脚本攻击
为了防御XSS攻击,开发人员必须谨慎处理由用户提供的并且又反过来提供给用户的那些数据。这里所说的“用户提供的数据”应该定义为所有从外部网络连接发送给Web应用程序的那些数据。
它可以是登录时用HTML表单提交的用户名,一个后台的Ajax请求、一封电子邮件、乃至http报头。要把所有这些数据都看作是从外部网络连接进入Web应用程序的有潜在危险的数据。
对于所有由用户提供的随后又通过HTTP应答(诸如Web页面以及AJAX响应(HTTP响应码200)、页面未找到错误(HTTP响应码404)、服务器错误(类似的HTTP 响应码502)、重定向(例如HTTP 响应码302,等等)回显给用户的那些数据,开发人员必须采取下列措施之一: |
|
【收藏】【打印】【进入论坛】 |
|
|
|
|
|
|
|