您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 跨网站脚本攻击(XSS)的原理与防范对策
跨网站脚本攻击(XSS)的原理与防范对策摘要:随着计算机网络技术的迅速发展,网络安全问题已变得越来越受到人们的重视,网络攻击形式多种多样,很多蠕虫病毒、木马病毒等植入到某些网页中,给网络用户带来了很大的安全隐患。其中XSS跨网站脚本攻击,恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。本文主要阐述了XSS的机理和特点,重点分析了网页代码的检测以及木马的特征,并针对这些特点进行了一些相应防范对策的探讨。关键词:网页木马;XSS;攻击;防范一、前言网页木马是一种新型的恶意代码,一些攻击者将它人为的植入到服务器端的HTML页面中,通过客户端对服务器的访问来传播恶意攻击代码,它主要是通过浏览器以及其中的一些插件漏洞来进行植入,网页木马是一种客户端的攻击方式,它能有效的绕过防火墙的检测,隐秘的在客户端将恶意代码植入,客户端在不知情的情况下将这些恶意可执行程序进行下载和执行。给互联网用户造成严重的安全威胁。在Web2.0出现以后,XSS的危害性达到了十分严重的地步。跨站脚本英文名称是(CrossSiteScript),为了与层叠样式表(CascadingStyleSheets简称CSS)区分,故命名为XSS。XSS攻击是指入侵者在远程WEB页面的HTML代码中插入具有恶意目的的数据,用户认为该页面是可信赖的,但是当浏览器下载该页面时,嵌入其中的脚本将被解释执行。XSS具有自身的独有特点,目前国内外很多研究人员围绕XSS的防御进行了深入的探讨与研究,同时攻击者也在采用一些更先进的手段来提高木马的攻击隐蔽性,用以提高木马的攻击成功率,因此,XSS的机理与防范对策研究已成为了当前计算机工作者的一个重要课题。二、XSS的机理与特征1.XSS的成因跨网站脚本XSS漏洞的成因其实就是Html的注入问题,攻击者的输入没有经过严格的控制进入了数据库,最终显示给来访的用户,导致可以在来访用户的浏览器里以浏览用户的身份执行Html代码,数据流程如下:攻击者的Html输入—web程序—进入数据库—web程序—用户浏览器。目前,所有的网站上几乎都提供一个站内或站外信息搜索框。在此搜索框中,您可以搜索到网站上任何可用的东西。这个搜索表单看起来这样:图1-1图1-2内部代码:formaction=“search.asp”method=“get”inputtype=“text”name=“q”value=””/inputtype=“submit”value=“搜索”//form在asp网页上显示的搜索结果,同时它也列出了在“关键字”的搜索结果。web页面上,不管用户搜索什么内容,它将显示搜索结果在网页上。现在如果一个攻击者尝试注入恶意脚本,比如在搜索框中输入如下Html代码:“scriptalert(‘XSS跨站脚本攻击’)/script”则代码会变成inputtype=textname=qvalue=scriptalert(‘XSS跨站脚本攻击’)/script/,嵌入的JavaScript代码将会被浏览器执行,将显示一个警告框,提示“XSS跨站脚本攻击”。而不能完成用户搜索功能。(上述两个网站已经做XSS过滤,不能看见警告框)下面是一个关于用户注册页面的例子,当然这个示例很简单,几乎攻击不到任何网站,仅仅看看其原理。我们知道很多网站都提供用户注册功能,网站后台数据库存储用户名、密码,方便用户下次登录,有些网站是直接用明文记录用户名、密码,恶意用户注册账户登录后使用简单工具查看cookie结构名称后,如果网站有XSS漏洞,那么简单的就可以获取其它用户的用户名、密码了。图2-1如图2-1所示的用户注册页面。允许用户填入注册信息,然后存储到后台数据库中。因为我们完全信任了用户输入,用户注册信息都能正确的进入数据库。但有些恶意的用户会利用这个漏洞输入HTML和JS代码,例如scripttype=”text/javascript”src=””/script这段代码直接输入到“用户名”栏中,窃取用户信息。在中:varusername=CookieHelper.getCookie('username').value;varpassword=CookieHelper.getCookie('password').value;varscript=document.createElement('script');script.src='='+username+'&password='+password;document.body.appendChild(script);这样就轻松的获取了cookie中的用户名和密码。2.跨网站脚本攻击的类型2.1非持久性跨网站脚本攻击,非持久性XSS也称为是反射跨网站漏洞。它是最常见的XSS类型。在这,注入数据反射给攻击者。上面的例1,是非持续的攻击。典型的非持久性XSS包含与XSS的链接。2.2持久性跨网站脚本攻击(存储性),持久性跨网站脚本是存储跨站点脚本。当它发生时XSS变量存储在网站的数据库,每当用户打开网页时执行。每次用户打开浏览器,脚本执行。持久性XSS比非持久性XSS更有害,因为每当用户打开要查看的内容的网页时,将自动执行该脚本。上面例2就是持久性跨网站脚本攻击。2.3基于DOM的跨站脚本攻击,基于DOM的XSS有时也称为“type-0XSS”。它发生时,XSS变量执行由DOM修改用户的浏览器网页的结果。在客户端的HTTP响应不会更改,但以恶意的方式执行的脚本。三、XSS防范对策XSS攻击的模式很简单,就是把自己的代码嵌入到页面里,随页面一块执行;XSS攻击的防范也一样简单,对于网站的开发者,首先应该把精力放到对所有用户提交内容进行可靠的输入验证上。这些提交内容包括HTML、URL、查询关键字、http头、post、get数据等。只接受在你所规定长度范围内、采用适当格式、你所希望的字符。阻塞、过滤或者忽略其它的任何东西。针对出现在不同位置的用户输入内容,其处理策略有所不同。1、html只需要处理掉即可,只要没有html标签,页面就是安全的。可以使用asp内置方法Replace(str,“”,“”)Replace(str,“”,“”)来处理待输出的内容,将,,转义。2、JS将要输出到js代码片断中的用户输入内容没有好的办法进行处理;仅转义少数字符不能保证去掉所有的攻击可能。因此,一般建议不要把用户产生的内容直接输出到js片断中。如果条件所限,必须将内容直接输出,有如下方法可供选择:1)如果待输出的内容有特定的取值返回或者特定的格式,可以使用白名单或者正则表达式进行处理。2)可以将内容输出到html的隐藏标签或隐藏表单中,js通过获取标签的内容得到该内容。3、检查那么,对已有的页面,该如何检查呢?这个问题的回答是,目前没有很好的办法能完全检查出服务器中可能存在XSS攻击的页面;有一些办法可以检查出比较明显的疏漏,其基本思路如下:1)从apache的access_log中取出所有unique的请求,依次修改其某一个参数为“scriptalert(‘xss')/script”,发起请求。2)获取返回的内容,如果内容中有原样的该字符串,表明此可疑输入没有经过处理便输出到页面上,页面存在隐患,需要处理。通过这种办法,可以检查出绝大多数能通过get请求发起的XSS攻击。那些在access_log没有出现的请求参数,这里没有检查到,可能有所遗漏,就需要手动去整理,测试。通过Post发起的请求需要用另外一种策略进行检查。其思路如下:将网站上所有可以输入的表单,依次输入特征字符串,比如说'”,如果提交后产生的页面中含有未处理的此字符串,说明存在隐患。通过以上分析我们看到,XSS是一种危害较大、较难防范,并且更加隐蔽的攻击方式。其实只要明白其原理,再加上勤加思考防范的对策,就可以根治XSS漏洞。参考文献:1.《网页木马攻防实战》电子工业出版社,任飞,章炜,张爱华编著/2009-052.针对基于编码的跨站脚本攻击分析及防范方法,张伟,吴灏小型微型计算机系统、/2013年。3.网页木马机理与防御技术张慧琳,邹维,韩心慧软件学报/2013年4.
本文标题:跨网站脚本攻击(XSS)的原理与防范对策
链接地址:https://www.777doc.com/doc-6055516 .html