XSS攻击方法和防御技术研究

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

XSS攻击方法和防御技术研究

作者:涂风涛杨晨霞

来源:《电脑知识与技术》2019年第11期

摘要:XSS漏洞可以分为三种类型:反射型、持久型和基于DOM的XSS漏洞。该文主要研究这三种不同类型漏洞的产生原因、攻击方法和防御技术。

关键词:反射型XSS;持久型XSS;基于DOM的XSS

中图分类号:TP393 文献标识码:A

文章编号:1009-3044(2019)11-0061-03

Abstract: 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 XSS

1 背景

一般的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程序。

相关文档
最新文档