网站运营
位置:首页>> 网站运营>> 谈跨站脚本攻击与防御

谈跨站脚本攻击与防御

 来源:asp之家 发布时间:2010-02-21 11:36:00 

标签:跨站脚本,脚本攻击,脚本

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

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

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

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

1 什么是HTml输入?

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

《img src=“http://www.aspxhome.jpg” width=100 onerror=alert(“载入图片错误!”)》

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

2 哪里才是罪恶的来源?

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

过滤代码:

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=“javascript: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》

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

上面的问题好象本质上就是一个东西,那就是用户超越了他所处的标签,也就是数据和代码的混淆,对付这种混淆的办法就是限制监牢,让用户在一个安全的空间内活动,这通过上面的分析大家也可能已经知道,只要在过滤了《》这两个人人都会去杀的字符之后就可以把用户的输入在输出的时候放到“”之间,现在的一般的程序都是这样做的,譬如[img]http://www.loveshell.net[/img]将会转化成《img src=“http://www.loveshell.net”》这是个好的安全习惯,然后呢?就要让用户的输入处在安全的领域里了,这可以通过过滤用户输入里“”实现,但是不要忘记了,这个标签本身也是不安全的,过滤掉空格和tab键就不用担心关键字被拆分饶过了,然后就是用文章中提到的办法过滤掉script关键字,最后就是防止用户通过&#这样的形式饶过检查,转换掉&吧!

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

0
投稿

猜你喜欢

  • 做为站长学习如何防止SQL注入是非常必须的,因为一旦网站被注入小到挂马,大到破坏系统程序,可以说对网站的破坏是非常大的,对于asp编写的程序
  • 许多人在用IIS建设网站的过程中或多或少都会出现问题,在IIS6中有些是以前版本中就曾经出现过,IIS6中也有些是新发现的问题,本文在此对建
  • 千橡公司和kaixin001关于&ldquo;开心网&rdquo;名称归属的官司尚未了结,千橡已经把针对kaixin001的
  • 12月3日上午消息,28商机在线(28.com)母公司中网在线(OTC:CHNT)已在美国纽约OTCBB市场通过借壳的方式悄然挂牌交易。财报
  • Windows Server自带的互联网信息服务器(Internet Information Server,IIS)是架设网站服务器的常用工
  • ProFTPD是一个Unix平台上或是类Unix平台上(如Linux,FreeBSD等)的FTP服务器程序,它是在自由软件基金会的版权声明(
  • DHCP概述1 采用DHCP的必要性在TCP/IP网络上,每台工作站要能存取网络上的资源之前,都必须进行基本的网络配置,一些主要参数诸如IP
  • 当我们用鼠标滚动放大图片时,往往会把页面表格也撑大了,这样造成页面不美观,为避免这个问题的出现,我们可以用下面的方法来解决这个问题:修改模板
  • UCenter Home 2.0后续版本持续改进与创新已经成为广大站长密切关注的话题,为了让广大站长及时了解产品研发动态,下面就简单的为大家
  • 在各类会议上总有一些有趣的事情。会上,搜索引擎公司总会有重大的宣布,业界重要人物也总会发表主题演讲。在旧金山召开的“复制内容和多网站问题”大
  • 如今在浩瀚的互联网中,各类型的网站多如牛毛,全国性门户类有新浪,搜狐,网易,腾讯,网商类的有淘宝,拍拍,有啊,慧聪等等,社区论坛以天涯,猫扑
  • Discuz!是个不错的玩意, X2已经算是很棒了,但毕竟还有很多不足的地方,比如X2调用活动主题时,会在内容输出的地方自动添加活动图片、参
  • 前面不重要的步骤人人都有,我也一样的,用哈别人的,后面的关键地方是原创,注意看,正向,反向都有,详细解答,觉得能行,整合其实是共用注册页,登
  • 所有搞网络营销的人都知道论坛营销基本是以量取胜,为什么说是以量取胜呢,因为你在一个论坛上只发一个帖子,基本上没什么效果,所以现在出现了很多如
  • 昨天在听AdSense的一个网络会议的时候,主讲人提到了一个提高Adsense广告相关度的技巧,可供那些感觉广告匹配度不高、广告点击率低的A
  • 据官方消息,Discuz!X1.5视频发布会将于9月20日下午1点30分举行,目前已进入倒计时阶段。本次发布会将采用视频互动的方式,通过官方
  • 说句实在话,作为中国排名第一的搜索引擎,出现这种情况真的是很不应该,但是却着实出现了。在五月的时候,很多的seoer就讨论过这个现象。有很多
  • 安装好Serv-U初次运行时,会自动弹出创建域和账户操作向导窗口。由于使用向导创建的账户会带来一些未知的安全问题,因此在这里建议单击“取消”
  • 无论是在校生,上班族,还是网吧用户,一定都遇到过令人怒不可遏的ARP攻击,ARP攻击会恶意阻断你的计算机与别的计算机之间的网络通信,导致网络
  • 10月29日消息,据国外媒体报道,亚马逊网站将在美国时间10月29日开始运行网上购物升级服务系统:亚马逊PayPhrase。届时,在线购物的
手机版 网站运营 asp之家 www.aspxhome.com