首页 美女贴图 网络日记 重庆租房 搜索指南 网络电视 飘网音乐 飘网博客 精彩网址 友情链接 飘网地图 本站留言
飘网中国
专题:网络营销 | 网站设计 | QQ技巧 | 搜索优化 | 菜鸟进阶 | 病毒攻防 | 网络技术 | 系统应用 | 本站作品 | 常用软件 | 工具软件 |
飘网中国>>菜鸟进阶>>正文

谈跨站漏洞脚本攻击与防御

编辑: 来源: 更新:2006-10-29 点击:
【字体:

摘要:首先看看跨站脚本漏洞的成因,所谓跨站脚本漏洞其实就是Html的注入问题,恶意用户的输入没有经过严格的控制进入了数据库最终显示给来访的用户,导致可以在来访用户的浏览器里以浏览用户的身份执行HTml代码。
关键字:跨站漏洞 
正文:
   网络上曾经有过关于跨站脚本攻击与防御的文章,但是随着攻击技术的进步,以前的关于跨站脚本攻击的看法与理论已经不能满足现在的攻击与防御的需要了,而且由于这种对于跨站脚本认识上的混乱,导致现在很多的程序包括现在的动网都存在着跨站脚本过滤不严的问题,希望本文能给写程序的与研究程序的带来一点思路。

  还是首先看看跨站脚本漏洞的成因,所谓跨站脚本漏洞其实就是Html的注入问题,恶意用户的输入没有经过严格的控制进入了数据库最终显示给来访的用户,导致可以在来访用户的浏览器里以浏览用户的身份执行HTml代码,数据流程如下:

  恶意用户的Html输入————>web程序————>进入数据库————>web程序————>用户浏览器

  这样我们就可以清楚的看到Html代码是如何进入受害者浏览器的了,我们也就可以根据这个流程来讨论跨站脚本的攻击与防御了!

  1 什么是HTml输入?

  这里给出一个HTml代码的示例

以下是引用片段:
<img src="http://www.loveshell.jpg" width=100 onerror=alert("载入图片错误!")> 


  很多的程序最终都是将用户的输入转换成这种形式的。可以看到<>是告诉浏览器这是一个Html标记,img是这个Html标记的名称,src是这个标记的第一个属性,=后面是这个属性的值,后面的width是第二个属性,onerror是标记的事件属性。大家可以看到,一个Html标记是包括很多元素的,并不是传统意义上的只有输入<>才会注入Html,事实上只要你的输入处在Html标签内,产生了新的元素或者属性,就实现了跨站脚本攻击!实际上大多数隐秘的跨站脚本攻击是不需要<>的,因为现在的Ubb标签已经让你处在了Html标记之内,很有意思,不是么?

  2 哪里才是罪恶的来源?

  既然我们的目标是引入代码在目标用户的浏览器内执行,那么我们来看看哪些地方可以引入HTml代码吧!如果用户可以不受限制的引入<>,那么很显然他可以完全操纵一个Html标记,譬如 这样的形式,这对于追求安全的程序来说是绝对不允许的,所以首先要做转换的就是<>,通过如下代码:

  过滤代码:

以下是引用片段:
  replace(str,"<","<")

  replace(str,">",">")
 


  好了,用户可能不能构造自己的HTml标记了,那么利用已经存在的属性如何呢?下面的代码依然可以工作得很好:

以下是引用片段:
<img src="javascript:alert(/xss/)" width=100>  


  因为很多的Html标记里属性都支持javascript:[code]的形式,很好,很多的程序意识到了这一点,可能做了如下的转换:

  过滤代码

以下是引用片段:
  Dim re  

  Set re=new RegExp  

  re.IgnoreCase =True  

  re.Global=True  

  re.Pattern="javascript:"  

  Str = re.replace(Str,"javascript:")  

  re.Pattern="jscript:"  

  Str = re.replace(Str,"jscript:")  

  re.Pattern="vbscript:"  
    
  Str = re.replace(Str,"vbscript:")  

  set re=nothing   


  你看,只要发现以javascript等脚本属性的形式都会被过滤掉,失去了:的脚本代码是起不了作用的!这样完美了么?事实上Html属性的值,注意是值而不是属性本身是支持&#ASCii这种形式表示的,譬如上面的代码可以换成这样:

   以下是引用片段:
<img src="javascript:alert(/xss/)" width=100> 


  代码又执行了,呵呵!看来你漏掉了点什么哦,加上这个代码吧!

以下是引用片段:
replace(str,"&","&") 


  行了,&失去它原来的意义了,用户不能以其他方式表示Html属性值了哦!等等,这样的过滤真可以相信么?只要发现这种过滤的关键字机制,饶过就是简单的问题了:

以下是引用片段:
<img src="javas cript:alert(/xss/)" width=100> 


  没有javascript关键字了哦!注意中间那个是tab键
[1][2]
上一篇:跨站漏洞脚本执行详解
下一篇:QQ业务跨站漏洞初步研究
最新文章 更多
推荐文章 更多
热门文章 更多
© 2005-2010 飘网中国 版权所有
站长邮箱:①LCC-749AT163.com ②FlymornATgmail.com(AT改为@)
如转载时,请注明出处;本站部分资源来自网络,如有侵权,请来信说明;飘易文章系统 HTML版.
渝ICP备05000119号