热门关键字:   网站安全  黑客攻防  安全漏洞  系统安全  网络安全
站外
广告
域名申请虚拟主机 信息安全 域名注册 云主机 网络安全技术 企业网络安全 站外
广告
文字广告位招租 文字广告位招租 文字广告位招租 文字广告位招租 云安全

Web攻防之跨站脚本攻击和防范技巧详解

发布时间:2012-12-23 21:07文章来源:瑞星文章作者:秩名 点击次数:
摘要:XSS跨站脚本攻击一直都被认为是客户端Web安全中最主流的攻击方式。因为Web环境的复杂性以及XSS跨站脚本攻击 的多变性,使得该类型攻击很难彻底解决。那么,XSS跨站脚本攻击具体攻击行为是什么,又该如何进行有效的防范呢?本文对此进行了有针对性的具体实例分...

跨站脚本攻击(Cross Site Scripting)是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身 份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。为了与层叠样式表(Cascading Style Sheets)的缩写CSS区分开,跨站脚本攻击通常简写为XSS

下面这个页面的主要作用是获取用户输入的参数作为用户名,并在页面中显示“欢迎您,XXX”的形式,具体代码如下:

 

  1. <?php 
  2.  
  3. $username = $_GET["name"]; 
  4.  
  5. echo "<p>欢迎您, ".$username."!</p>"; 
  6.  
  7. ?> 

正常情况下,用户会在URL中提交参数name的值为自己的姓名,然后该数据内容会通过以上代码在页面中展示,如用户提交姓名为“张三”,完整的URL地址如下:

http://localhost/test.php?name=张三

在浏览器中访问时,会显示如下图1所示内容: 


图1

此 时,因为用户输入的数据信息为正常数据信息,经过脚本处理以后页面反馈的源码内容为<p>欢迎您, 张三!</p>。但是如果用户提交的数据中包含有可能被浏览器执行的代码的话,会是一种什么情况呢?我们继续提交name的值 为<script>alert(/我的名字是张三/)</script>,即完整的URL地址为
http://localhost/test.php?name=<script>alert(/我的名字是张三/)</script>

在浏览器中访问时,我们发现会有弹窗提示,如下图2所示: 


图2

那么此时页面的源码又是什么情况呢?

源 码变成了“<p>欢迎您, <script>alert(/我的名字是张三/)</script>!</p>”,从源代码中我们发现,用户输入 的数据中,<script>与</script>标签中的代码被浏览器执行了,而这并不是网页脚本程序想要的结果。这个例子正是 最简单的一种XSS跨站脚本攻击的形式,称之为反射型XSS。

 

XSS跨站脚本攻击的分类

根据XSS跨站脚本攻击存在的形式及产生的效果,可以将其分为以下三类。

一、 反射型XSS跨站脚本攻击

反 射型XSS脚本攻击即如我们上面所提到的XSS跨站脚本攻击方式,该类型只是简单地将用户输入的数据直接或未经过完善的安全过滤就在浏览器中进行输出,导 致输出的数据中存在可被浏览器执行的代码数据。由于此种类型的跨站代码存在于URL中,所以黑客通常需要通过诱骗或加密变形等方式,将存在恶意代码的链接 发给用户,只有用户点击以后才能使得攻击成功实施。

二、 存储型XSS跨站脚本攻击

存储型XSS脚本攻击是指Web应用程序会将用户输入的数据信息保存在服务端的数据库或其他文件形式中,网页进行数据查询展示时,会从数据库中获取数据内容,并将数据内容在网页中进行输出展示,因此存储型XSS具有较强的稳定性。

存 储型XSS脚本攻击最为常见的场景就是在博客或新闻发布系统中,黑客将包含有恶意代码的数据信息直接写入文章或文章评论中,所有浏览文章或评论的用户,都 会在他们客户端浏览器环境中执行插入的恶意代码。如流行的Bo-Blog程序的早期版本中存在对用户提交评论数据过滤不严导致的XSS跨站脚本攻击漏洞, 黑客可以在文章评论中提交插入恶意数据的UBB代码,提交后,Bo-Blog程序会将数据保存至数据库中,当用户浏览该日志时,就会执行插入的恶意代码, 如图3所示。 


图3

三、 基于DOM的XSS跨站脚本攻击

基 于DOM的XSS跨站脚本攻击是通过修改页面DOM节点数据信息而形成的XSS跨站脚本攻击。不同于反射型XSS和存储型XSS,基于DOM的XSS跨站 脚本攻击往往需要针对具体的javascript DOM代码进行分析,并根据实际情况进行XSS跨站脚本攻击的利用。让我们来针对如下代码进行详细分析:

 

  1. <html> 
  2.  
  3. <head> 
  4.  
  5. <title>DOM Based XSS Demo</title> 
  6.  
  7. <script> 
  8.  
  9. function xsstest() 
  10.  
  11.  
  12.  var str = document.getElementById("input").value; 
  13.  
  14.  document.getElementById("output").innerHTML = "<img src='"+str+"'></img>"; 
  15.  
  16.  
  17. </script> 
  18.  
  19. </head> 
  20.  
  21. <body> 
  22.  
  23. <div id="output"></div> 
  24.  
  25. <input type="text" id="input" size=50 value="" /> 
  26.  
  27. <input type="button" value="提交" onclick="xsstest()" /> 
  28.  
  29. </body> 
  30.  
  31. </html> 

以上代码的作用是提交一个图片的URL地址以后,程序会将图片在页面中进行展示,如我们提交百度LOGO图片的地址http://www.baidu.com/img/baidu_sylogo1.gif,那么在页面中展示结果如下图4所示。 


图4

当 用户输入完百度LOGO的地址,点击“提交”按钮后,“提交”按钮的onclick事件会调用xsstest()函数。而xsstest()函数会获取用 户提交的地址,通过innerHTML将页面的DOM节点进行修改,把用户提交的数据以HTML代码的形式写入页面中并进行展示。以上例子中输出的 HTML代码为“<img src=” http://www.baidu.com/img/baidu_sylogo1.gif”></img>”。

以上情况 为正常的用户输入情况,那黑客又是怎么利用该种类型代码实现XSS跨站脚本攻击的呢?黑客可以通过构造如下数据,输入“#’ onerror=’javascript:alert(/DOM Based XSS Test/)”,在浏览器中提交后,发现代码果然被执行,出现了弹窗提示,如下图5所示。 

图5

XSS跨站脚本攻击实例

以 上是针对XSS跨站脚本攻击三种类型的简单介绍。看了上面的描述朋友们或许会想,难道仅仅弹出一个提示框就是XSS跨站脚本攻击了吗?答案当然是否定 的,XSS跨站脚本攻击的利用可以实现多种效果,甚至可以说XSS跨站脚本攻击漏洞的利用是一种黑客攻击的艺术,下面我们结合具体实例进行详细的分析和描 述,了解一下XSS跨站脚本攻击都能做些什么事情。

标签分类:

上一篇:Web攻防之二实施渗透测试(黑客如何拿网站权限)
下一篇:Web攻防之漫谈短链接安全