张雨锋,王 炅
(闽江学院 计算机与控制工程学院,福建 福州 350108)
近十年来,我国互联网行业经历了蓬勃发展的阶段。随着用户数量的不断增加,互联网技术的创新、数字经济的发展以及政府数字化建设方面的技术水平也得到了显著提升。随着互联网的不断发展,越来越多的用户加入网络社会中,各类互联网应用不断涌现,互联网凝聚了全世界最为庞大的用户群体。
近年来,随着社交网络、微博等一系列社交软件以及其他互联网应用的不断涌现,Web环境上的互联网应用已经得到广泛应用。然而,由于Web应用程序的广泛使用,跨站脚本攻击(XSS攻击)已成为一种常见的网络安全问题。
攻击者可以在Web应用程序中注入JavaScript脚本或HTML标签等代码,从而利用用户的信任,欺骗受害者执行恶意脚本。这种跨站脚本攻击(Cross-Site Scripting,简称XSS)不仅可以导致用户的个人信息被盗取,还可以使网站遭受瘫痪等严重后果。XSS攻击具有易于实施、难以检测等特点,成了当前Web应用程序中一种常见的网络安全问题。
跨站脚本攻击是当前Web漏洞中危害性和影响最大的一种攻击手段。在当前的互联网安全领域中,XSS攻击成了一个备受关注的热点问题。
由于互联网不断的发展和安全问题的不断涌现,根据目前国家信息安全漏洞库现有数据显示,自2016年7月起已经发现和收集了9 401个XSS漏洞,2011年至今共新增了3 801个。在开放式Web应用程序安全项目的2007年到2013年报告中,XSS漏洞曾有3次位列前三。随着互联网应用的不断发展,XSS攻击已经变得越来越普遍且难以检测。因此,研究跨站脚本攻击的原理和利用变得尤为重要。如何检测并预防XSS漏洞问题已经成了Web安全领域的重要问题。
Cross-Site Scripting,可译为“跨站脚本”或“层叠样式表”。由于可能会存在缩写混淆的问题,故跨站脚本攻击另缩写为XSS[1]。这是一种可以导致网页应用程序出现问题的安全漏洞攻击方式。
XSS攻击旨在攻击并破坏网络安全,它会在网络中植入各种巧妙的恶意指令并使其进入网页,让用户进行加载并执行。虽然这些执行恶意的网页程序大多数是JavaScript,但在Java、VBScript、LiveScript、ActiveX、Flash与HTML中也可以执行。在攻击成功后,攻击方有一定可能会获得一些权限,这些权限可以授权攻击者执行一些操作,比如浏览私密内容,也可能直接影响用户的浏览体验,这一行为将会破坏安全系统的稳定性和安全性,给个人或社会造成损失。
XSS可以被划分为几种不同的类型,其中包括:非持久性型(反射型)XSS、持久型(存储型)XSS、通用型XSS以及突变型XSS[2]。
反射型XSS攻击是一种利用应用程序反射用户输入并将恶意脚本反映到浏览器中的攻击方式。攻击者会将恶意代码注入URL参数或表单中,当用户访问包含该参数或表单的页面时,恶意脚本就会被执行。攻击者通常通过诱导用户访问包含恶意脚本的URL来实现攻击。
举个例子,如果用户在不加防范的情况下将用户名设置为,那么在访问特定页面时,这段代码就会被反射到浏览器中并执行。这种攻击可以导致各种安全问题,例如窃取用户的敏感信息或篡改页面内容。
漏洞成因:XSS漏洞通常发生在应用程序将未经处理的用户输入或用户可控参数输出到页面上的情况下,以下是一些主要的场景。
(1)将不可信数据插入HTML标签之间时;将不可信数据插入HTML属性里时;将不可信数据插入SCRIPT里时[3]。
(2)将不可信数据插入Style属性里的情况,同样具有一定的危害性。
(3)将不可信数据插入HTML URL里时。
(4)使用富文本时,并未采用XSS规则引擎来实现编码过滤。
对于以上的几个场景,若服务端或者前端没有做好防范措施,就会出现漏洞隐患。
反射型XSS攻击通常可以利用搜索和其他应用程序功能,但相对于存储型XSS攻击,它的安全性较低。这是因为反射型XSS攻击需要用户点击相关链接才能被触发,而且现代浏览器的内置XSS保护程序和防御措施(如NoScript)可以减少其威胁。尽管如此,反射型XSS攻击仍然可能导致用户信息泄露和身份盗窃等严重问题。
持久型XSS攻击通常是通过社交网络和Web文档等方式实现的HTML注入。与反射型XSS攻击不同的是,持久型XSS攻击不需要任何特定的链接来传播。它将恶意代码嵌入目标网站的数据库中,从而在其他用户访问该网站时自动执行。
这种攻击技术的优势在于,它只需要感染一次就可以影响到许多用户。持久型XSS攻击可能出现在多种网络环境中,例如博客评论、用户评论、留言板、社交媒体、HTML电子邮件等。当用户访问被感染的网站时,恶意代码将自动执行,可能导致用户信息泄露和身份盗窃等安全问题。
漏洞成因:XSS漏洞的产生可以归结为两种原因。(1)恶意程序的存储可能会导致XSS漏洞。攻击者可以将恶意代码存储在服务器上,以便将其注入网站的页面中。(2)XSS漏洞也可能是由于其他用户在前端,或者是管理员在前后端的访问时无意间执行了恶意代码而导致的。攻击者可以通过各种方式欺骗用户或管理员,使其执行恶意代码,从而产生跨站连接并且可能产生跨站的攻击。
DOM是一个与平台和编程语言无关的接口,可以通过JavaScript对网页显示内容和操作浏览器的接口进行访问和操作。它的主要作用是让信息无需通过服务器而直接在浏览器中接收和处理,从而减轻服务器的负担。
然而,在DOM节点通过修改页面内容的操作中,存在一种XSS攻击方式,称为DOM Based XSS。与其他类型的XSS攻击相比,DOM Based XSS攻击具有较高的隐蔽性和难度。
漏洞成因:DOM型XSS是基于DOM文档对象模型[4],其本质是一份XML文档。它能够让浏览器通过JavaScript更加便捷地访问和使用DOM,它的出现大大提高了浏览器的效率。当发现并确认客户端代码中存在DOM型XSS漏洞时,钓鱼者会利用自己构建的URL诱导用户进行访问,这种利用方式与反射型技术有相似之处。它的优势在于,构造的URL参数无需发送到服务器,从而实现绕过WAF、躲避服务端的检测功能。
通用型XSS也叫做UXSS或者Universal XSS,全称Universal Cross-Site Scripting。上文所提到的3种XSS攻击的是因为客户端或服务端的代码开发不严谨等问题而存在漏洞的目标网站或者应用程序。这些攻击的先提条件是访问页面存在漏洞,但是UXSS是一种利用浏览器或者浏览器扩展漏洞来制造产生XSS的条件[5]并执行代码的一种攻击类型。
3.5.1 漏洞成因
由于Web浏览器具有强大的功能,因此成了当前大多数人使用的应用程序之一。然而,一旦新漏洞被发现,无论是被攻击者利用还是向官方报告,都需要相当长的时间来解决,这段时间内漏洞可能会被用于UXSS攻击。
随着技术的发展,越来越多的浏览器支持扩展程序,但这也可能会给用户带来更多的安全隐患。UXSS攻击是其中一种,它不仅可以攻击网站页面,还可以访问其他没有漏洞的页面,因此成为XSS攻击中最具破坏力的类型之一。
3.5.2 几个典型的漏洞案例
(1)Adobe Acrobat的IE6和火狐浏览器可能存在安全漏洞。
这是一个比较经典的例子。当在使用扩展程序时可能会导致错误,使得代码可以执行。具体来说,在PDF阅读器中存在漏洞,允许攻击者在客户端执行脚本。攻击者可以构造恶意页面并写入恶意脚本,然后利用扩展程序打开PDF时运行代码。Stefano Di Paola和Giorgio Fedon首先记录和描述了一个在Mozilla Firefox浏览器中Adobe Reader插件中可利用的UXSS缺陷,该插件通过一系列参数允许从外部数据源获取数据以填充文档表单,如果没有正确执行,将允许跨站脚本攻击。具体案例可以详见:Acrobat插件中的UXSS报告。
(2)Flash Player UXSS漏洞-CVE-2011-2107。
在2011年,发现了一个Flash Player插件中的漏洞,该漏洞存在于所有版本中。攻击者可以利用构造的.swf文件来访问Gmail设置并添加转发地址,从而收到任意一个被攻破的Gmail账号的所有邮件副本(发送时都会抄送)。Adobe承认了这个漏洞的存在。具体案例可以详见: Flash Player UXSS漏洞-CVE-2011-2107报告。
(3)安卓版Chrome浏览器漏洞。
Chrome浏览器的安全性备受关注,因此它的XSS攻击潜力受到限制。攻击者可以利用Chrome的Intent对象,创建一个恶意的网页,并注入大量的病毒和木马。由于Intent对象的存在,攻击者可以轻松地通过Chrome来执行攻击,因为它们可以直接与Android操作系统的其他组件进行交互,而无需任何额外的权限。这使得Chrome成为攻击者的热门目标之一。具体案例可以详见: Issue 144813: Security: UXSS via com.android.browser.application_id Intent extra。
突变型XSS也被称为mXSS或Mutation-based Cross-Site-Scripting,这是一种XSS攻击的变体。
3.6.1 漏洞成因
当JavaScript代码被映射到innerHTML属性时,会出现一些意外的变化,从而可能导致原本安全的HTML代码被渲染成可能带来威胁的XSS攻击代码,这将导致原本的安全认定失效。
在攻击代码段中,当一些JS代码被输出到DOM中或其他形式被再次渲染时,就会导致XSS攻击的执行。这种在HTML内容进入innerHTML后发生的意外变化,也会导致XSS攻击流程的发生。
这种类型的XSS攻击流程是将拼接的内容置于innerHTML属性中,这种操作在现代WEB应用代码中非常常见,因为很多WEB应用都使用了innerHTML属性。这将导致潜在的mXSS攻击。从浏览器的角度来看,mXSS对三大主流浏览器(IE、Chrome、Firefox)都有影响。
3.6.2 mXSS的类型
(1)反引号打破属性边界导致的 mXSS。该类型是最早被发现并利用的一类mXSS,于2007年被提出,随后被有效地修复。
(2)未知元素中的xmlns属性所导致的mXSS。一些浏览器不支持HTML5的标记,例如IE8会将article、aside、menu等当作是未知的HTML标签。
(3)在CSS中,可以使用反斜线“”对字符进行转义,例如property: 'v【1 lue'表示property: 'value',其中61是字母a的ASCII码(16进制)。此外,反斜线后也可以接Unicode编码,例如:20AC 表示。通常情况下,这种转义方式不会出现问题。然而,在使用innerHTML时,一些奇怪的情况会发生,从而导致所谓的mXSS(CSS中的跨站脚本攻击)。
(4)CSS中双引号实体或转义导致的mXSS。接上一部分,这依然是CSS中所存在的问题," " " 等双引号的表示形式均可导致这类问题。
(5)CSS属性名中的转义所导致的mXSS。
(6)非HTML文档中的实体突变。
(7)HTML文档中的非HTML上下文的实体突变。
XSS攻击涉及两个要素:攻击者提交恶意代码和浏览器执行恶意代码。基于这两个攻击要素,有4种预防方式可供选择。
DOM类型的XSS攻击涉及网站前端JavaScript代码的问题,即前端代码对不可信数据的处理不够严谨,导致将不可信数据当成代码来执行。特别是在使用.innerHTML、.outerHTML、document.write()这些操作时,更要引起重视,不能把不可信数据当成HTML插入页面中,应该尽可能地使用.textContent、.setAttribute()等方法来处理。
在DOM中,内联事件监听器,如location、onclick、onerror、onload、onmouseover以及标签的href属性和JavaScript的eval、setTimeout、setInterval等方法,都可以将字符串转换成可执行的代码。如果未经验证的数据被拼接到这些字符串中并传递给API,则会极大地增加安全风险,因此必须谨慎处理,以确保系统的稳定性。
当数据经过前端过滤并传递到后端进行处理时,如果攻击者能够绕过前端的过滤机制,直接构造请求并提交恶意代码,就会对系统安全带来威胁。为了解决这个问题,可以在后端将用户输入的信息进行过滤,然后再存入数据库中。例如:一个普通用户输入了5 <7,后端将其转化为5 $lt; 7,即在录入之前进行转义处理,避免恶意代码的注入。
但是,即使对用户输入进行了过滤,也不能确定这个内容会输出到什么地方。这里有两个问题:(1)用户输入的信息可能会同时发送到前端和客户端,如果通过 escapeHTML() 处理,客户端展示的信息将成为杂乱码(例如:5 $lt; 7);(2)在前端中,所需的代码根据其不同的位置也应当不同。例如:在使用 5 $lt; 7 作为 HTML 拼接页面的时候,可以正常地显示出:5 <7 这一内容。
因此,采取输入过滤并非完全可靠。“防止浏览器执行恶意代码”提供了一种关于此类XSS的防护措施,可以采用如下两种方式进行有效的防护。
为了提高浏览器的安全性并避免被攻击者利用,本研究可以在前端渲染过程中明确告知浏览器需要包含哪些内容,例如:文本(.innerText)、属性(.setAttribute)、样式(.style)等。这样浏览器就能更加安全地执行预期的代码,避免受到欺骗。
具体来说,为了避免使用innerHTML造成的XSS漏洞,可以使用textContent或innerText代替innerHTML来设置DOM元素的文本内容;在使用jQuery库时,可以使用text()方法而不是html()方法来设置元素的文本内容,以减少XSS的风险。
为了在拼接HTML时有效地进行转义,应该使用适当的转义库。常用的模板引擎(如 doT.js、ejs 和 FreeMarker)通常只会将&<>"'/这几个字符进行转义,虽然这样有助于保护HTML,但仍然存在一些缺陷。因此,为了更好地保护网站免受XSS攻击,应该使用更加严格的转义规则,并确保在所有的输入点(包括从数据库中读取的数据)都应用适当的转义规则。
随着数字化程度的提高和信息技术的快速发展,本研究的生活和工作方式已经发生了根本性的变化。随之而来的是,网络安全问题也越来越频繁地发生。特别是在金融、医疗、军事和能源等重要行业,一旦遭到黑客攻击或病毒感染,将可能导致重大的经济和社会损失,甚至威胁到国家安全。在这些领域,安全问题不仅是技术问题,更是一个战略问题。
OWASP Top 10中的十大安全漏洞问题,虽然已经成为业界公认的安全标准,但是这些漏洞并不是一成不变的。随着黑客攻击手段的不断升级和安全技术的不断创新,新的安全问题也不断出现。因此,本研究需要对网络安全问题保持高度的关注,及时掌握最新的安全技术和漏洞信息,采取有效的安全措施来保护本研究的网络系统和数据安全。这包括加强用户教育、制定更加严格的安全策略和规定、加强网络监控等。只有通过这些综合的措施,才能有效地保护本研究的网络安全,确保本研究的数字生活更加安全、便利、高效。