注册通行证 用户名 密码
  • 文章投稿
  • 博客
  • 论坛
  • 设为首页
  • 加入收藏
jztop.com网络技术
  • 首页
  • | iT新闻
  • | 操作系统
  • | 组网建网
  • | 网络安全
  • | 程序开发
  • | 办公一族
  • | 工具软件
  • | 网页制作
  • | 多媒体制作
  • | 网吧技术
  • | 服务器
  • | 专题教程
Vista | 软件评测 | 系统备份 | 优化 | 进程 | 聊天 | 病毒 | Linux | 黑客 | 防火墙 | 数据库 | Web开发 | Java | Word | 游戏 | 32位开发 | 移动开发
当前位置:首页 > IT新闻 > 病毒与安全 内容正文:也谈跨站脚本攻击与防御之XSS

也谈跨站脚本攻击与防御之XSS

发布时间:2006-07-27 14:24:21 来源:天极安全 网友评论 0 条

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

  还是首先看看跨站脚本漏洞的成因,所谓跨站脚本漏洞其实就是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键弄出来的!关键字被拆分了哦!这是个很麻烦的问题,很多人忘记了这些特殊的字符,呵呵!有人想到要过滤空格了,在过滤之前我们再看看其他的一些东西吧!也许我们现在所处的src属性已经无法利用了,但是我们依然可以产生自己的属性或者事件机制哦!依然是可以执行Html代码的,首先说说事件机制吧:

以下是引用片段:
<img src="#" onerror=alert(/xss/)>

  这样依然可以执行代码的哦!明白问题出在哪了,不是么?有的程序员仿佛明白了,注意我说的是仿佛,动网就是一个典型的例子,事件属性不是要onerror么?很多人开始用正则表达式了,发现关键的词如onerror就会做转换或者提示用户不执行,是不是没有机会了呢?

  当然不是的,事件只是让代码运行的一种方法而不是所有的,可以定义事件了那么也就可以实现自己弄出自己的属性了,试试下面的:

以下是引用片段:
<img src="#" style="Xss:expression(alert(/xss/));">

  呵呵,还是执行了哦!在做关键字过滤之后有人发现是不是属性之间分隔要用到空格,好,他们把空格堵死了(这样认为的人很多,呵呵)!将空格转成 是个很普遍的方法?是么?甚至还可以让别人无法关键字拆分,不要太自信了,试试下面的代码看看如何:

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

  嘿嘿,Good Work!这好象是利用了脚本里注释会被当作一个空白来表示造成的!那怎么办呢?上面提到的好象一直都是在进行被动的攻击防御,为什么不抓住他的本源出来呢?哪里出了问题哪里堵上!

  上面的问题好象本质上就是一个东西,那就是用户超越了他所处的标签,也就是数据和代码的混淆,对付这种混淆的办法就是限制监牢,让用户在一个安全的空间内活动,这通过上面的分析大家也可能已经知道,只要在过滤了<>这两个人人都会去杀的字符之后就可以把用户的输入在输出的时候放到""之间,现在的一般的程序都是这样做的,譬如将会转化成

以下是引用片段:
<img src="http://www.loveshell.net">
  这是个好的安全习惯,然后呢?就要让用户的输入处在安全的领域里了,这可以通过过滤用户输入里""实现,但是不要忘记了,这个标签本身也是不安全的,过滤掉空格和tab键就不用担心关键字被拆分饶过了,然后就是用文章中提到的办法过滤掉script关键字,最后就是防止用户通过&#这样的形式饶过检查,转换掉&吧!

  在文章中开始提到的图里可以看到,数据的转换和过滤是可以在3个地方进行转换的,在接受数据的时候可以转换下,在进入数据库的时候可以转换下,在输出数据的时候也可以转换下,但是困惑在哪里呢?不得不面对一个问题就是许多时候程序员舍不得为安全做出那么大的应用上的牺牲,安全是要有代价的,譬如现在邮箱的就不愿意舍弃html标签,所以他们侧重于XSS的IDS检测的性质,只要发现不安全的东西就会转化,但是攻击是无法预知的,漂亮的东西总是脆弱的,有限制,肯定就有人会饶过,呵呵。本文没什么技术含量,只是希望搞安全的脚本人员能更加的了解Xss,跨站,不是那么简单滴.

相关文章
【评论】【收藏本文】【打印】【关闭】
上一篇文章:“勒索软件”泛滥 网友还需谨防敲诈
下一篇文章:后门程序攻击代码惊现网络
讨论区
查看
已有 0 位对此新闻感兴趣的网友发表了看法
匿名发表
注册通行证 登陆
图文阅读推荐
从UUsee漏洞事件看互联网中的“连带威胁”
从UUsee漏洞事件看互联网中的“连带威胁”
杀毒软件谁主沉浮  光华更胜一筹
杀毒软件谁主沉浮 光华更胜一筹
史上破坏力最大的10种计算机病毒排名出炉
史上破坏力最大的10种计算机病毒排名出炉
谁比谁优秀?2006国产杀毒软件评测报告
谁比谁优秀?2006国产杀毒软件评测报告
推荐阅讯
  • 小心为上 海淀区16家骗钱网站被曝光
  • 06.14—06.20病毒周报
  • 信息产业部两记重拳 开打信息垃圾
  • Firefox2漏洞多 需紧升级Firefox3
  • 摆脱垃圾邮件 洁身自爱胜于围追堵截
  • 卡巴斯基首次参加亚洲CeBIT反响热烈
  • 木马黑手再一次伸向QQ 要小心陌生人
  • 杀毒软件是摆设?80%新病毒无法查杀
  • 6.3毒报:AUTO键盘记录员监视键盘
  • 网络上演蜾女世界杯 原是灰鸽子作怪[图]
阅读排行
  • 1.谁比谁优秀?2006国产杀毒软件评测报告
  • 2.瑞星推出“橙色八月”免费专杀工具
  • 3.免费下载: 瑞星“威金”病毒专杀工具
  • 4.06上半年十大病毒排行榜出炉 灰鸽子成毒王
  • 5.金山毒霸杀毒U盘产品使用完全技巧
  • 6.手机杀毒软件市场正在形成
  • 7.诡秘下载器变种CXW(Trojan.DL.Delf.cxw}病毒
  • 8.史上破坏力最大的10种计算机病毒排名出炉
  • 9.“威金”蠕虫衍生百余变种 盗取游戏密码很难
  • 10.瑞星发布芯片级防毒墙 企业防毒市场重新洗牌
专题教程
  • 大话G游 专题:手机病毒揭密
  • ARP攻击防范与解决方案 路由故障处理手册
  • Picasa中文版_Picasa教程 专题:清除流氓软件
  • Firefox专题 seo搜索引擎优化专区
  • 重装Windows必知的事情 装机之必备软件大行动
病毒专杀栏
  • 杀毒软件反被病毒杀 连"救命"都不能喊
  • 金山ARP防火墙
  • 还原卡神话破灭“机器狗”病毒来势汹汹
  • cctv经济半小时:你的手机现在安全吗?
  • 新挂马方式开始流行 ARP挂马称雄局域网
  • 木马和病毒清除的通用解法
  • IP地址不再冲突 查找ARP攻击者元凶
  • 教你几招识别和防御Web网页木马
  • 分析:封杀BT只是暂时的止痛药
  • QQ爆危险漏洞,“QQ游戏邀请大盗”邀请你玩病
关于我们 | 诚聘英才 | 联系我们 | 版权声明 | 网站大事 | 网站地图 | 意见建议
CopyRight 2005-2007 Jztop.Com 版权所有 未经许可 请勿转载