·服务管理:提升核心竞争力
·知识密集型企业的知识管理
·流程再造PK流程优化及梳理
·房地产要不要成本信息化
·工程项目管理信息化的探讨
·从公司管理到IT审计
·IT融入战略四条路
·视频监控蝶变重生之路
 
零售业BI应用或将破冰
·关于本土零售企业“规模不经济”的诟病,在最近两年被业界时时提起,而支撑这一说法的相关数据也比比皆是 ...
信息化有的放矢
·信息化目标明确、有的放矢,是一航成仪在信息化建设过程中秉承的原则。大到整个集团、小到每个具体的IT项目,一航成仪都有明确的目标指向 ...
信息化和重要战略机遇期的关系
·信息化是本世纪头20年这一重要战略机遇期的重要内容和显著的时代特征。 ...
·阻止病毒木马侵害您的电脑
·柯尼卡美能达关爱农民工子弟行动
·研究显示Wi-Fi网络安全状况堪忧
·2007年20大互联网安全威胁出炉
·富士通展示迷你移动扫描仪(图)
·安全运维管理保障IT系统运转
·CIO挑选新技术的小窍门
·"微软Tech·Ed技术大会"亮相北京
·电子病历推广难题
·CIO顺畅走过“磨合期”
·让IT部门学会算帐
·一个ERP项目经理的管理感悟
·SOA的十大技术理论体系
·跨越软件工程中的两大鸿沟
·平台及产品建设的三个未来趋势
·SOA与EAI:关系继续微妙
·怎样评估公司的CRM状态?
·关于SOA的七个关键性问题解答
·爱普生EMP-280防尘性能评测
·评测超短焦投影机明基MP771
·5999元的NEC VT590+ XGA投影机评测
·微电脑2007年度产品奖
·奥图码商务娱乐两用投影机评测
·明基MP511投影机评测印象

再谈跨站脚本攻击与防御


yesky SMB.PCWorld.COM.CN | 2007-11-30 10:27:17

引:随着攻击技术的进步,以前的关于跨站脚本攻击的看法与理论已经不能满足现在的攻击与防御的需要了


  网络上曾经有过关于跨站脚本攻击与防御的文章,但是随着攻击技术的进步,以前的关于跨站脚本攻击的看法与理论已经不能满足现在的攻击与防御的需要了,而且由于这种对于跨站脚本认识上的混乱,导致现在很多的程序包括现在的动网都存在着跨站脚本过滤不严的问题,希望本文能给写程序的与研究程序的带来一点思路。

  还是首先看看跨站脚本漏洞的成因,所谓跨站脚本漏洞其实就是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标记了,那么利用已经存在的属性如何呢?下面的代码依然可以工作得很好:

  

  因为很多的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

推荐】【打印
网友评论
以下网友评论只代表网友个人观点,不代表PCWorld观点
发表内容:
Copyright(c) 2000-2008 pcworld.com.cn. All Rights Reserved.
京ICP备 05038969 号