XSS攻击方法和防御技术研究
- 格式:doc
- 大小:21.50 KB
- 文档页数:6
前端安全-常见的攻击以及防御⼀、基础知识1、XSS(Cross Site Scripting)跨站脚本攻击(1)原理:页⾯渲染的数据中包含可运⾏的脚本(2)攻击的基本类型:反射型(url参数直接注⼊)和存储型(存储到DB后读取时注⼊)(3)注⼊点:HTML节点内的内容(text);HTML中DOM元素的属性;Javascript代码;富⽂本//HTML节点内容注⼊<div><script>alert(1);</script></div>//DOM属性注⼊<img src='/images/1.png' onerror='alert(1);'>//javascript代码<script>var a = '1';alert(1);''</script>//富⽂本是html标签,⽂字,以及样式的集合,很容易实现HTML节点内容注⼊和DOM属性注⼊,有被攻击的风险2、CSRF(Cross Site Request Forgy)跨站请求伪造原理:在第三⽅⽹站向本⽹站发起请求(如图)(1)⽤户在a站前端页⾯发起登录(⾝份认证)请求(2)a站后端确认⾝份,登录成功,cookie中存在⽤户的⾝份认证信息(3)b站前端页⾯向a站后端发起请求,带着a站的cookie信息(⾝份认证信息),请求成功综上,可以清楚的知道,只要⽤户访问了b站的前端页⾯,b站就可以在⽤户完全不知道的情况下,带着a站的⽤户登录态(cookie)向a站发起请求3、点击劫持原理:第三⽅⽹站通过iframe内嵌某⼀个⽹站,并且将iframe设置为透明不可见,将其覆盖在其他经过伪装的DOM上,伪装的可点击DOM(按钮等)与实际内嵌⽹站的可点击DOM位置相同,当⽤户点击伪装的DOM时,实际上点击的是iframe中内嵌的⽹页的DOM从⽽触发请求操作特点:⽤户⾃⼰做了点击操作;⽤户毫不知情;⼆、如何防御1、XSS攻击防御(1)浏览器⾃带防御机制,主要应对反射型攻击(HTML内容或属性):http响应头中⾃动添加x-xss-protection,值为0(关闭),1(打开),默认打开(2)对特定字符做转义:内容注⼊替换尖括号( < => < > => > )属性注⼊替换单引号或双引号( " => " ' => ' )(3)CSP(Content Security Policy)内容安全策略:⽤于指定哪些内容可执⾏//我们可以在http响应头中设置Content-Security-Policy//图⽚可以从任何地⽅加载(注意 "*" 通配符)//多媒体⽂件仅允许从 和 加载(不允许从这些站点的⼦域名)//可运⾏脚本仅允许来⾃于Content-Security-Policy: default-src 'self'; img-src *; media-src ; script-src //同时meta中也⽀持设置Content-Security-Policy<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">2、CSRF攻击防御:CSRF的发⽣有⼏个特点,b站发送的请求带着a站的cookie信息; b站发送请求不经过a站的前端;http请求头中的referer为b站。
Web安全攻防中的常用方法Web安全是网络世界中一个非常重要的话题。
Web安全的攻防是Web应用程序中最重要的方面。
攻击者试图利用各种技术和工具攻击Web应用程序,以获得未经授权的访问、窃取有价值的数据或者在Web应用程序上执行恶意操作,而安全团队则致力于保证Web应用程序的安全性,确保用户的数据和交易信息不受到攻击。
在这场攻防战中,有一些常用的攻击和防御方法,下面将进行详细介绍。
1. SQL注入攻击与防御SQL注入是一种常见的Web攻击方式,主要针对使用SQL语言的数据库应用程序。
攻击者通过输入恶意SQL语句,使程序执行预期外的操作,例如删除、修改或查询数据库中的数据。
因此,必须采取一些措施来防止SQL注入攻击的发生。
防御方法:1)检查输入参数开发人员需要检查用户输入,确保它们的格式和内容都符合要求。
例如,可以限制输入数量和类型,并对输入的数据进行验证和清理,以避免恶意输入。
2)使用SQL参数化查询参数化查询是一种建议使用的查询方式,它可以将用户输入作为参数传递给SQL语句,从而避免注入攻击。
当使用参数化查询时,开发人员应该尽量避免使用拼接字符串来构建SQL语句,因为这种方式很容易遭受攻击。
2. 跨站请求伪造攻击与防御跨站请求伪造(CSRF)攻击是一种Web攻击,通过伪装成受信任主机的请求,以执行未经授权的操作。
该攻击通常利用用户的会话信息,以完成被攻击网站上的特定操作。
防御方法:1)使用CSRF令牌CSRF令牌是一种用于防御CSRF攻击的技术。
该技术在登录用户的会话中设置一个随机值,在发送重要请求时需要将该值包含在请求中。
服务器将验证请求中的CSRF令牌是否是来自受信任的源,如果不符合要求,则请求会被拒绝。
2)限制请求来源另一个防御CSRF攻击的方法是通过检测HTTP请求头中的来源来判断请求是否来自受信任的源。
如果请求不来自受信任的源,则服务器将拒绝该请求。
3. XSS攻击与防御XSS攻击是通过在Web页面上嵌入恶意代码来攻击该页面的一种攻击方式。
SQL注入及XSS(跨站脚本)攻击防御技术方案SQL注入、、什么是SQL注入SQL注入:利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,这是SQL注入的标准释义。
SQL注入利用的是正常的HTTP服务端口,表面上看来和正常的web访问没有区别,隐蔽性极强,不易被发现。
、、SQL注入的危害SQL注入的主要危害包括:1、未经授权状况下操作数据中的数据2、恶意篡改网页内容3、私自添加系统账号或是数据库使用者账号4、网页挂木马。
、、SQL注入的方法1.没有正确过滤转义字符在用户的输入没有为转义字符过滤时,就会发生这种形式的注入式攻击,它会被传递给一个SQL语句。
这样就会导致应用程序的终端用户对数据库上的语句实施操纵比方说,下面的这行代码就会演示这种漏洞:statement := "SELECT * FROM users WHERE name = '" + userName + "'; "这种代码的设计目的是将一个特定的用户从其用户表中取出,但是,如果用户名被一个恶意的用户用一种特定的方式伪造,这个语句所执行的操作可能就不仅仅是代码的作者所期望的那样了。
例如,将用户名变量(即username)设置为:a' or 't'='t,此时原始语句发生了变化:SELECT * FROM users WHERE name = 'a' OR 't'='t';如果这种代码被用于一个认证过程,那么这个例子就能够强迫选择一个合法的用户名,因为赋值't'='t永远是正确的。
在一些SQL服务器上,如在SQL Server中,任何一个SQL命令都可以通过这种方法被注入,包括执行多个语句。
下面语句中的username的值将会导致删除“users”表,又可以从“data”表中选择所有的数据(实际上就是透露了每一个用户的信息)。
XSS攻击XSS攻击:跨站脚本攻击(Cross Site Scripting),对于跨站脚本攻击,黑客界共识是:跨站脚本攻击是新型的“缓冲区溢出攻击“,而JavaScript是新型的“ShellCode”。
XSS攻击的危害包括1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力3、盗窃企业重要的具有商业价值的资料4、非法转账5、强制发送电子邮件6、网站挂马7、控制受害者机器向其它网站发起攻击XSS攻击与防御2.1 XSS的传统防御技术2.1.1 基于特征的防御XSS漏洞和著名的SQL注入漏洞一样,都是利用了Web页面的编写不完善,所以每一个漏洞所利用和针对的弱点都不尽相同。
这就给XSS漏洞防御带来了困难:不可能以单一特征来概括所有XSS攻击。
传统XSS防御多采用特征匹配方式,在所有提交的信息中都进行匹配检查。
对于这种类型的XSS攻击,采用的模式匹配方法一般会需要对“javascript”这个关键字进行检索,一旦发现提交信息中包含“javascript”,就认定为XSS攻击。
这种检测方法的缺陷显而易见:骇客可以通过插入字符或完全编码的方式躲避检测:躲避方法1)在javascript中加入多个tab键,得到< IMG SRC="jav ascript:alert('XSS');" >;躲避方法2) 在javascript中加入(空格)字符,得到< IMG SRC="javascri pt:alert('XSS');" >;躲避方法3) 在javascript中加入(回车)字符,得到< IMG SRC="javascript:alert('XSS');" >;躲避方法4)在javascript中的每个字符间加入回车换行符,得到< IMG SRC="j\r\na\r\nv\r\n\r\na\r\ns\r\nc\r\nr\r\ni\r\np\r \nt\r\n:alert('XSS');" >躲避方法5)对"javascript:alert('XSS')"采用完全编码,得到< IMGSRC=javascrip?74:alert('XSS') >上述方法都可以很容易的躲避基于特征的检测。
XSS跨站脚本攻击技术原理及防护措施2010年07月12日星期一 1:08 P.M.发表:红科网安作者:Amxking发布时间:2010-06-23摘要:本文作者Amxking通过对xss跨站脚本攻击漏洞的历史、攻击特点、攻击原理描述及案例代码实战举例详细解析XSS漏洞攻击技术,并提出防御XSS跨站漏洞的思路方法。
及WEB开发者开发网站过程中防范编码中产生xss跨站脚本攻击漏洞需要注意的事项。
XSS漏洞概述:XSS(Cross Site Script)跨站点脚本攻击是一种注射的问题,在这种恶意脚本注入否则良性和信任的网站类型。
跨站点脚本(XSS)攻击,攻击者使用时,会出现一个网络应用程序发送恶意代码,一般是在浏览器端脚本的形式,向不同的最终用户。
这些缺陷,使攻击成功是相当普遍,发生在任何地方从一个Web应用程序使用在输出它没有验证或编码了用户输入。
攻击者可以使用XSS的恶意脚本发送到一个毫无戒心的用户。
最终用户的浏览有没有办法知道该脚本不应该信任,将执行该脚本。
因为它认为该脚本来从一个受信任的源,恶意脚本可以访问任何Cookie,会话令牌,或其他敏感信息的浏览器保留,并与该网站使用。
甚至可以重写这些脚本的HTML网页的内容。
XSS漏洞历史:XSS(Cross-site scripting)漏洞最早可以追溯到1996年,那时电子商务才刚刚起步,估计那时候国内很少人会想象到今天出现的几个国内电子商务巨头淘宝、当当、亚马逊(卓越)。
XSS的出现“得益”于JavaScript的出现,JavaScript的出现给网页的设计带来了无限惊喜,包括今天风行的AJAX(Asynschronous JavaScript and XML)。
同时,这些元素又无限的扩充了今天的网络安全领域。
XSS 漏洞攻击特点:(1)XSS跨站漏洞种类多样人:XSS攻击语句可插入到、URL地址参数后面、输入框内、img标签及DIV标签等HTML函数的属人里、Flash的getURL()动作等地方都会触发XSS漏洞。
前端开发技术中的网站安全防御方法在当前信息社会中,网站安全问题成为了互联网发展中的重要议题。
特别是对于前端开发技术而言,网站安全防御方法更是不可或缺的一环。
本文将介绍一些前端开发技术中的网站安全防御方法。
一、跨站脚本攻击 (XSS) 防御跨站脚本攻击是互联网中常见的攻击方式之一。
前端开发者可以通过以下方法来防范XSS攻击:1. 输入过滤:对于用户输入的数据,进行过滤和验证,过滤掉一些可能存在恶意代码的字符。
例如,使用正则表达式判断用户输入中是否包含尖括号等特殊字符。
2. 输出编码:在前端页面上显示用户输入的数据时,可以对数据进行HTML实体编码,将特殊字符转换为对应的实体表示。
这样可以避免恶意代码被执行。
3. 使用HTTP-only Cookie:将敏感信息存储在HTTP-only Cookie中,这样可以防止恶意脚本获取到用户的敏感信息。
二、跨站请求伪造 (CSRF) 防御跨站请求伪造是一种攻击方式,攻击者通过引诱用户点击恶意链接或访问恶意网页,在用户不知情的情况下发送伪造的请求。
前端开发者可以采取以下措施来防范CSRF攻击:4. 加入验证码:在一些重要的操作上,如修改密码、删除数据等,可以加入验证码的机制,要求用户输入正确的验证码才能进行操作。
5. 使用HTTP Referer 验证:在处理重要操作的请求时,前端可以验证请求头中的Referer字段,判断请求是否来自同一域名。
若不是则可能为CSRF攻击,应返回错误信息。
6. Token验证:在前端页面载入时,生成一个随机的Token,并将其作为参数或者放在请求头中发送到服务器,后端验证请求中的Token是否合法。
这样能够阻止不合法请求。
三、内容安全策略 (CSP)内容安全策略是一种前端开发技术中的安全防御方法,可以帮助防范恶意脚本的注入、恶意广告等攻击。
通过设置CSP规则,可以限制网页中加载资源的来源,防止加载来自非法域名的资源。
7. 设置默认策略:可以通过设置默认策略,只允许加载同一域名下的资源,并禁止加载外部资源。
xss 防御措施XSS(Cross-Site Scripting)跨站脚本攻击,是一种常见的网络安全漏洞,攻击者通过向目标网页中注入恶意脚本代码,从而使得用户的浏览器执行该恶意脚本,从而达到攻击目的。
为了保护网站和用户的安全,采取一系列XSS防御措施是至关重要的。
以下是一些常见的XSS防御措施:1.输入验证和过滤:对所有用户输入进行验证和过滤,包括表单提交的数据、URL参数、Cookie等。
可以采用白名单过滤器,只允许特定的字符和格式,过滤掉潜在的恶意代码。
2.输出编码:在将用户输入显示到网页中时,必须进行适当的输出编码。
不同的编码方法适用于不同的输出场景,包括HTML编码、URL编码、JavaScript编码等。
编码能够将恶意脚本代码转义或转换为非执行的字符,从而阻止脚本的执行。
3. CSP(Content Security Policy):CSP是一种新的浏览器安全政策,通过在HTTP头部添加相应的策略指令,可以有效地防御和减轻XSS攻击。
CSP可以限制网页中允许加载资源的域名,禁止使用内联脚本和eval函数等危险的操作。
4. HTTPOnly Cookie:将敏感信息存储在HTTPOnly Cookie中,这样可以防止XSS攻击者获取到用户的Cookie。
HTTPOnly属性可以阻止脚本读取和修改Cookie,增加了攻击者获取用户会话信息的难度。
5.点击劫持防御:点击劫持是一种特殊类型的XSS攻击,攻击者通过将目标网站透明覆盖在一个恶意网页之上,欺骗用户在不知情的情况下点击恶意按钮或链接。
为了防御此类攻击,可以采用X-Frame-Options响应头或者Content-Security-Policy指令,禁止网页在iframe中加载。
6.清除HTML标签和属性:对用户输入的内容进行过滤和清理,删除、禁止或转义所有危险的HTML标签和属性。
可以使用第三方的HTML 清理库,如OWASP Java Encoder、HTML Purifier等。
xssdom型原理
XSSDOM(也称为DOM Based Cross-Site Scripting)是一种跨站脚本攻击技术,它利用浏览器中的文档对象模型(DOM)来注入恶意的代码并执行攻击者的指令。
XSSDOM攻击的原理基于以下几个步骤:
1. 攻击者构建一个恶意的URL或执行一段恶意的JavaScript 代码,并将其传递给目标用户。
2. 用户点击攻击者构建的恶意URL或执行恶意代码。
这可能是通过点击恶意链接、在输入框中插入恶意脚本或通过其他用户交互方式触发。
3. 当用户点击或执行恶意代码时,浏览器会解析URL或执行脚本,并根据DOM规则构建对应的文档对象模型。
4. 在构建过程中,如果攻击者插入的恶意代码被浏览器解析为合法的DOM节点,它将被添加到文档对象模型中。
5. 一旦恶意代码被添加到文档对象模型中,它将被浏览器执行,从而导致恶意操作。
例如,攻击者可以窃取用户的敏感信息、执行未经授权的操作,或重定向用户到恶意网站。
XSSDOM攻击与其他类型的跨站脚本攻击(如存储型XSS和反射型XSS)相比,它更依赖于浏览器的文档对象模型及其解析过程。
攻击者的目标是利用这种解析过程中的漏洞,使浏
览器可以解析恶意脚本,并将其视为合法的DOM节点。
因此,防御XSSDOM攻击的关键是对用户输入进行严格的过滤和验证,以防止恶意代码被解析并执行。
XSS漏洞原理及防御方法XSS漏洞,全称为跨站脚本攻击(Cross-Site Scripting),是一种常见的Web应用程序安全漏洞,攻击者能够在受害者浏览器中执行恶意脚本。
这种漏洞的原理是在Web应用程序中,未对用户输入的数据进行充分验证和处理,导致恶意脚本被插入到网页中。
XSS漏洞常见于Web应用程序中的输入输出处理过程中。
攻击者通常会将包含恶意JavaScript代码的输入数据提交给Web应用程序,而Web 应用程序在没有充分处理和过滤的情况下,将这些数据直接返回给用户,使得恶意代码可以被受害者的浏览器执行。
存储型XSS漏洞发生在Web应用程序将用户输入的数据存储在服务器端时。
攻击者提交的恶意脚本被保存在Web应用程序的数据库中,当其他用户浏览相应的页面时,恶意脚本会被执行。
反射型XSS漏洞则是将恶意脚本作为URL参数提交给Web应用程序,Web应用程序在接收到请求后将恶意脚本返回给用户浏览器,从而执行恶意代码。
这种类型的XSS漏洞通常需要攻击者将恶意URL发送给受害者,比较依赖于社会工程学。
基于DOM的XSS漏洞则是恶意脚本直接修改了页面的DOM结构,从而达到攻击的目的。
这种类型的XSS漏洞是由于JavaScript代码直接对DOM进行操作,没有对用户输入的数据进行充分验证和过滤。
针对XSS漏洞,需要采取以下防御措施:1.输入检查和过滤:对所有的输入数据进行验证和过滤,确保只接受预期的数据类型和格式。
可以采用白名单或黑名单的方式,过滤掉恶意代码和特殊字符。
2.输出转义:在将用户输入的数据输出到网页中时,将其中的特殊字符进行转义,防止浏览器将其当作脚本执行。
常见的转义方法包括HTML实体编码和URL编码。
3. 安全的编码实践:在书写Web应用程序时,要使用安全的编码实践,避免将用户输入的数据直接拼接到HTML和JavaScript代码中。
可以使用模板引擎或安全的API来进行数据的输出。
4. 设置HttpOnly和Secure标志:在使用Cookie进行用户会话管理时,将Cookie标志设置为HttpOnly和Secure,可以防止恶意脚本通过读取Cookie来窃取用户的敏感信息。
XSS攻击方法和防御技术研究作者:涂风涛杨晨霞来源:《电脑知识与技术》2019年第11期摘要:XSS漏洞可以分为三种类型:反射型、持久型和基于DOM的XSS漏洞。
该文主要研究这三种不同类型漏洞的产生原因、攻击方法和防御技术。
关键词:反射型XSS;持久型XSS;基于DOM的XSS中图分类号:TP393 文献标识码:A文章编号:1009-3044(2019)11-0061-03Abstract: There are three types of XSS vulnerabilities: reflection vulnerabilities, persistent vulnerabilities, and DOM-based XSS vulnerabilities. This article focuses on the causes, attack methods, and defense techniques of these three different types of vulnerabilities.Key words: reflection XSS;persistent XSS;DOM-based XSS1 背景一般的Web程序攻擊以服务器应用程序为目标,目的是执行非授权动作或者非法访问数据。
而跨站脚本攻击(Cross Site Script,XSS),它属于另外一种类型,因为它的攻击目标是Web程序的其他用户。
XSS是在Web程序中发现的最为普遍的漏洞,它常常与其他漏洞一起造成破坏性的后果,有时甚至可以演变为了某种自我繁殖的蠕虫。
2 反射型XSS如果Web程序用动态页面向用户显示错误消息,就容易造成反射型XSS漏洞。
以下给出了低安全性反射型漏洞的代码示例,该代码接收请求参数“_GET[‘name’]”并且在返回页面中直接写入该参数的值。
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {// 将用户的输入置入输出页面$html .= 'Hello ' . $_GET[ 'name' ] . '';}如果用户输入“yiwen”,Web程序返回“Hello yiwen”的页面。
但是当攻击者尝试输入“yiwen”时,嵌入在参数“name”中的脚本被客户的浏览器执行,就会弹出相应的消息对话框。
大部分的XSS漏洞都属于反射型。
这种漏洞之所以称为反射型,是因为攻击者把一个JavaScript代码隐藏在请求中,然后信息又被反馈回提出请求的用户。
反射型漏洞的攻击代码需要通过一个单独的请求和响应进行传递,有时也称为一阶XSS。
(1)攻击方式反射型XSS攻击必须诱使用户点击攻击者精心设计的URL地址才能够成功实施,攻击方式通常包括:①发送仿造的电子邮件,里面附带仿造的URL链接。
②在QQ或微信等即时通信程序中向目标用户提供一个URL。
③在自行创建的站点或者第三方站点发布恶意的URL。
(2)反射型XSS功能攻击者可以在XSS攻击载荷(payload)中提供各种功能,常见的功能包括:①窃取用户的会话令牌或Cookie。
②注入虚假的HTML内容,向用户显示虚假信息,也称为虚拟置换(Virtual Defacement)。
③注入脚本木马。
④让目标用户代替攻击者执行非法操作或远程攻击。
⑤直接攻击用户所在客户端的操作系统。
(3)漏洞利用方法XSS漏洞的可利用方法非常之多,以下列出了一些最常见的方法用于说明反射型XSS漏洞的危害。
①脚本标签。
如输入“”。
③脚本伪协议。
如输入“click here”,将生成一个链接,点击该链接即执行脚本“alert (1)”。
(4)防御技术从概念上说,防御XSS攻击十分困难,因为任何页面都会处理并显示用户数据,所以很难确定Web程序使用危险方式处理用户输入的所有情况。
用户输入未经适当确认与净化,就被复制到响应页面中,这是反射型XSS漏洞造成的原因。
所以,我们必须首先确认Web程序中用户输入被复制到响应页面的每种情况,其中包括提交的数据、输入保存在服务器端的数据和带外通道输入的数据,只有通过仔细审查程序代码才能确保每种情况都检查到。
然后,需要采取一种三重防御方法:输入确认、输出确认和删除危险的插入点。
①输入确认:在Web程序的某个位置接收到的用户数据,如果可能被复制到响应页面的话,那么就必须对它们进行尽可能严格的确认,包括限制数据长度、限制允许的字符集合、使用正则表达式限制数据的内容。
②确认输出:Web程序必须对复制到响应页面中的数据的每个字符进行HTML编码,以净化尽可能多的恶意字符,在PHP中可以使用htmlspcialchars函数实现。
③清除危险插入点:尽量避免直接在现有JavaScript中插入用户输入,即包括3 持久型XSS如果用户提交的数据不经适当的过滤或净化就保存在Web程序的数据库中,然后显示给其他用户,就会引发持久型XSS漏洞。
例如,代码没有对输入是否存在HTML标签字符进行确认,攻击者可以在输入中嵌入JavaScript脚本,Web程序会将脚本存入数据库,然后当用户查询数据处库内容时,即受到持久型XSS攻击。
通常,利用持久型XSS漏洞需要向Web程序提出至少两个请求,在第一个请求中嵌入恶意代码,等待Web程序接收并存儲这些代码。
在第二个请求中,当包含恶意代码的页面被用户查看时,恶意代码会被执行,所以持久型XSS攻击也称为二阶跨站脚本攻击。
反射型XSS攻击与持久型XSS攻击在攻击实施时有两个重要的区分:①反射型XSS攻击要求诱使用户访问某个专门设计的URL或链接,而持久型XSS攻击不需要。
②持久型XSS攻击可以保证,当用户受到攻击时,必然正在访问Web程序,因此攻击者更容易实现会话劫持之类的攻击;而反射型XSS攻击必须诱导用户登录并点击某个恶意链接才能完成攻击。
因此,持久型漏洞带来的威胁更为严重,特别是如果受攻击用户是管理员,那么攻击者可以获得管理员权限,从而接管Web程序。
反射型XSS的功能、漏洞方法和防御技术都适用于持久型攻击,但是持久型XSS的攻击方式与反射型XSS的有较大区别,可以分为带内和带外攻击方式。
带内攻击适用于大多数情况,它是将漏洞数据通过Web界面提交。
存在漏洞的可能位置包括:①个人信息字段,如姓名、地址、邮件电话等;②文档、上传文件和其他数据的名称;③提交给管理员的问题或反馈等;④赂其他用户传送的消息、注释、问题等;⑤记录在日志中,并且可能显示给管理员的任何内容,如URL、用户名、Referer和User-Agent等;⑥用户之间共享的上传文件内容。
攻击者只需要在上述位置提交恶意代码,然后等待用户查看有关内容,就可以发起持久型攻击。
带外攻击适用于通过其他渠道向Web程序提交漏洞数据的情况,Web程序通过其他渠道接收数据,并在最终生成的页面中显示。
例如,攻击者可以向某个邮件服务器发送包含恶意代码的邮件,然后等待用户查看该邮件,并以HTML格式显示邮件内容。
4 基于DOM的XSS反射型和持久型XSS存在共同的行为模式:Web程序提取用户的恶意输入并且以危险方式将这些输入返回给用户。
基于DOM的XSS没有这种特点,攻击者的脚本通过以下过程执行:①攻击者设计一个包含嵌入式JavaScript脚本的恶意URL,诱使用户点击;②攻击者嵌入的脚本不包含在服务器的响应中;③脚本是在用户的浏览器处理该响应时被执行的。
因为浏览器的文本对象模型DOM可以被客户端JavaScript访问,并且决定如何加载当前页面的URL。
如果Web程序发布的脚本可以从URL中提取数据,当这些数据被处理并更新页面内容时,Web程序就容易受到基于DOM的XSS攻击。
以下是基于DOM的XSS攻击代码示例,该代码在处理URL中的“default”参数时存在漏洞,“default”参数用于描述页面显示的语言是英语还是其他语言,但是Web程序没有对该参数做任何输入确认操作,在返回给用户的响应中调用URL解码对该参数值进行解码,并使用解码后的值动态更新页面内容。
攻击者只需要精心设计“default”参数,即可成功实施攻击。
需要指出的是,在返回给浏览器的页面内容中,并没有包含攻击者在输入中设计的JavaScript脚本。
if (document.location.href.indexOf("default=") >= 0) {var lang = document.location.href.substring(document.location.href.indexOf("default=")+8);document.write("" + $decodeURI(lang) +"");document.write("----");}document.write("English");document.write("French");基于DOM的XSS的攻击方式、功能和漏洞利用方式与反射型XSS基本一致,但是反射型XSS的防御技术并不适用于基于DOM的XSS,因为它不需要将用户控制的输入复制到服务器响应中。
Web程序应该尽量避免使用JavaScript处理DOM数据并插入页面中,如果无法避免,通常使用两种方法防止基于DOM的XSS漏洞。
①输入确认Web程序对需要处理的数据进行严格确认,使用客户端确认比在服务器端进行确认更加有效。
例如,可以在代码中增加确认代码,净化“default”参数的值;也可以在服务器端对URL数据进行严格的确认,实施多层防御,检测恶意请求。
②确认输出与防御反射型XSS相同,在用户可控的DOM数据插入页面之前,Web程序也可以对它们进行htmlspecialchars编码,从而将各种危险的字符以安全方式显示在页面中。
5 小结Web程序的攻击手段多种多样,本文着重介绍了XSS攻击方式,详细描述了各类XSS漏洞的产生原因、利用方式和对应的防御手段。
参考文献:[1] Acunetix. Audit Your Web Security with Acunetix Vulnerability Scanner[J/OL]. http:///vulnerability-scanner.[2] Ubuntu. Security[J/OL]. http:///Security.[3] Hume. 病毒和网络攻击中的多态变形技术原理分析及对策[J/OL]. http:///projects/Xcon/2003/Xcon2003_hume.ppt.【通联编辑:代影】。