Computer Science and Application 计算机科学与应用, 2021, 11(1), 195-206
Published Online January 2021 in Hans. /journal/csa
/10.12677/csa.2021.111020
跨站脚本(XSS)攻击与防护方法研究
王亚东
新疆大学信息科学与工程学院,新疆乌鲁木齐
收稿日期:2020年12月27日;录用日期:2021年1月21日;发布日期:2021年1月28日
摘要
跨站脚本(XSS)攻击多次位列OWASP (开放Web应用安全项目) Top10漏洞列表,是Web客户端面临的最严重的安全危害之一,为有效防御XSS攻击,本文提出了客户端和服务端相结合的XSS攻击防护方法。在客户端,首先判断输入是否为编码后的文本,如果是编码后的文本内容则解码后进行黑名单过滤,如果是未编码的,则直接过滤;在服务端采取强制输出格式的方法对输出到页面的内容进行格式限制,以此防御未知攻击载荷的XSS攻击。此外,通过搭建本地测试环境WAMP (Windows + Apache + Mysql + PHP),对XSS攻击过程进行模拟研究,并对本文提出的防护方法进行验证。实验的结果表明,本文提出的XSS防护方法能够有效合理地防御XSS攻击。
关键词
跨站脚本,Web漏洞,防护方法
Research on Cross-Site Scripting Attack
and Prevention Methods
Yadong Wang
College of Information Science and Engineering, Xinjiang University, Urumqi Xinjiang
Received: Dec. 27th, 2020; accepted: Jan. 21st, 2021; published: Jan. 28th, 2021
Abstract
Cross-site scripting (XSS) attack has been listed as one of the Top10 vulnerabilities in OWASP (open Web application security project) many times, and is one of the most serious security ha-zards faced by Web clients. In order to effectively defend against XSS attacks, this paper proposes
王亚东
an XSS attack protection method combining client and server. On the client side, the input is judged to be encoded text at first. If it is encoded text, the blacklist is filtered after decoding; if it is unencoded, it is directly filtered. At the server side, the output format is forced to restrict the con-tent output to the page, so as to prevent the XSS attack of unknown attack payloads. In addition, the local test environment WAMP (Windows + Apache + Mysql + PHP) was set up to simulate the XSS attack process, and the protection method proposed in this paper was verified. The experi-mental res
ults show that the XSS protection method proposed in this paper can effectively and reasonably defend against XSS attacks.
Keywords
Cross-Site Scripting, Web Application Vulnerability, Prevention Methods
This work is licensed under the Creative Commons Attribution International License (CC BY 4.0).
/licenses/by/4.0/
1. 引言
Web技术的快速发展,几乎使得人们生活领域的方方面面都应用到了Web应用程序,Web应用程序使用了大量的脚本语言,发展出了社交网络、在线购物和新闻发布浏览等复合型功能的Web程序。但随着Web程序功能复杂性的提高,也出现了很多问题,比如在很多应用程序的应用场景中,会要求用户
提供个人的身份认证等隐私数据,这也给恶意攻击者提供了可乘之机,恶意攻击者会借助各种非法手段盗取用户的隐私信息,进而实施其他更严重的违法行为,给用户的利益造成伤害。
跨站脚本攻击(Cross-site scripting, XSS)是Web应用安全问题的主要威胁之一[1]。造成跨站脚本攻击的主要原因是Web应用程序未对用户输入的内容进行有效的过滤,导致恶意脚本代码被用户的浏览器所执行,导致了用户信息的泄露、钓鱼欺骗等一系列恶意事件。近年来,跨站脚本攻击事件屡见不鲜,网络安全公司WebCohort的报告显示,超过80%的应用程序存在XSS漏洞[2],Twitter、微博和百度贴吧多次发生跨站脚本蠕虫攻击[3]。OWASP (Open Web Application Security Project)作为Web应用安全领域的权威,其每四年发布的OWASP Top10漏洞列表中,跨站脚本攻击始终位居前列。针对频发的跨站脚本攻击事件,国内外研究学者提出了多种解决方案。Shanly C等提出了一种Skip List算法,来进行XSS漏洞的检测,借助XSS攻击向量表,在识别准确率和算法的性能上行有了较大的提高[4];Shashank Gupta 提出了XSS防御框架,该框架是基于内容敏感的,目的是检测出隐藏在HTML5 Web应用程序中的XSS 恶意代码,缺点是该框架必须部署在云平台,对服务器的性能要求较高,对中小企业并不友好[5]。
本文主要研究了XSS攻击的原理和存在的根本性原因,并对XSS的防护方法进行了深入研究,通过对XSS攻击相关的Web安全策略的研究和对这些策略存在缺陷的探讨阐述,进一步搭建“留言板系统”
仿真实验环境,总结XSS攻击过程和原理,并在最后提出了针对XSS攻击的防护方法,将本文的方法部署在仿真环境中,通过攻击测试实验,证明了XSS防护方法的有效性。
2. XSS漏洞存在的原因分析
2.1. 同源策略及缺陷
同源策略(SOP)亦称为同域策略,指的是互相访问的站点之间具备相同的协议、域名和端口[6]。即限定动态的内容(比如:JavaScript、ActionScript)仅可以读取或修改和自身同源的HTTP请求及Cookie,不
王亚东
同源的请求或者内容不被允许进行读取和修改等操作,但是不同源的网站之间可以提出请求。同源策略没有明确规范的协议,保证了浏览器的正常跨域通信功能,市面上的浏览器基本上都支持同源策略。
假定有域xj,这个域包含多个子域,以m.xj和n.xj为例,进一步设定该域名下的所有页面均具有JavaScript脚本,表1描述的是不同页面之间能否互相访问,即发送通信请求并读取响应来判断是否遵循同源策略。
Table 1. Same-origin policy instance
表1. 同源策略实例
站点1 站点2 是否同源原因
www.xj/a.html www.xj/b.html 是协议、域名、端口均相同
网站搭建策略与方法www.xj/a.html www.xj:81/a.html 否http协议默认端口80,站点2端口为81 www.xj/a.html m.xj/a.html 否域与子域之间认定是不同域
m.xj/a.html n.xj/a.html 否不同子域之间被看作不同域
www.xj/a.html www.xj/a/c.html 是页面所在目录不同,但端口、协议、域名均相同www.xj/a.html www.xj/a.html 否遵从的协议不相同
www.xj/a.html http: //xj/a.html 否主机名不同。前者为www.xj,后者为xj
HTML中所使用的<script>、<link>、<iframe>等标签可以跨域加载需要的资源而不被同源策略限制,此外,XMLHttpRequest通过目标域返回HTTP授权时也是可以跨域访问的,因为JavaScript不能控制H
TTP的头部。从表1中可以看出,同属于一个域的子域之间也会被同源策略所限制,使得在开发Web应用时产生很多不便。为了解决这个问题,同源策略允许同一个域的不同子域的页面之间,通过对document.domain变量进行设置,有限的违反同源策略,使得子域的页面之间可以相互访问。这种有限度的违反同源策略也给Web 应用带来了安全隐患。假设域中的某个页面存在XSS漏洞,那么恶意攻击者就可以向这个页面注入JavaScript 代码,因为document.domain变量的存在,则意味着同时可以向该域中的任意页面注入JavaScript代码。2.2. Cookie安全策略
RFC2109规定:Web服务器被允许把用户信息及HTTP会话状态等数据写入客户端,并且以文件的形式存储在用户的计算机中[7]。当用户发起HTTP会话时,HTTP会话能使用HTTP头部把用户的Cookie发送到指定的Web服务器。近乎所有的Web应用均是利用Cookie来标记用户和保持会话状态。根据Cookie生存周期的不同,一般将其分为对话Cookie (亦称临时Cookie)和本地Cookie (亦称第三方Cookie)。会话Cookie,在用户浏览网页时,浏览器与服务器建立了Session,Cookie存放在浏览器的进程内存中,一旦浏览器关闭,则Cookie失效,只要浏览器不关闭,用户打开多少个别的标签页,Cookie依然是有效的;本地Cookie的值存放在客户端浏览器之中,本地Cookie在被创建时一同设置了生存周期,超过生存周期的Cookie便失效。
Cookie包含Domain、Path、Secure、Expires和HttpOnly等安全属性。
Secure属性是非必选的,该属性被设定时,只有用户发起HTTPS会话时,才会发送Cookie。该属性允许HTTP和HTTPS响应对设置进行修改,所以HTTP应答也能改变HTTPS应答所设置的Cookie的Secure属性,进一步导致HTTP请求能够获取Cookie值,容易造成CSRF攻击和XSS攻击;Expires属性能够限制Cookie的有效时间,一般情况下,未设置该属性,则浏览器关闭时,Cookie就被删除,设置了该属性,则Cookie在设定的时间之前都是有效的;HttpOnly属性的设置目的为保证用户Cookie的安
王亚东
全性,一旦该属性被设置,则浏览器无法通过JavaScript的kie进行访问。
因为浏览器的安全策略不尽相同,当浏览器中某个域的页面想要加载其他域中的资源,有的浏览器会禁止发送第三方Cookie。通过对不同浏览器的调研得到表2。浏览器支持第三方Cookie的发送将会使得XSS攻击盗取用户身份信息变得简单,不必保证用户登录的网页还处于活动状态,只需要用户在第三方Cookie生存周期内登陆过目标网站即可。
Table 2. Third-party Cookie support in the browser
表2. 浏览器的第三方Cookie支持情况
浏览器名称是否默认支持第三方Cookie 是否支持P3P
IE6-IE9 否是
火狐是否
Chrome 是部分支持
Safari 否否
Opera 是否
3. XSS攻击原理与攻击模拟分析
3.1. XSS攻击原理
跨站脚本攻击(Cross Site Scripting)是一种经常出现在Web应用程序中的计算机安全漏洞,是由于Web应用程序对用户的输入信息过滤不足而产生的[8]。攻击者利用网站漏洞把恶意的脚本代码(一般包括JavaScript和HTML代码)注入网页,当其他用户浏览被注入脚本代码的网页时,便会自动执行嵌入的恶意代码,可能导致用户的身份信息盗用、钓鱼欺骗和XSS蠕虫病毒等。
因为这种漏洞最早展示的时候是跨域执行的,故称为跨站脚本攻击,跨域指的是绕过同源策略[9]。
又因为其与层叠样式表(Cascading Style Sheets, CSS)的缩写冲突,为了防止混淆,故将其简写为“XSS”。
通常情况下,既可以将跨站脚本理解成一种Web安全漏洞,也可以看作是一种攻击手段。
XSS漏洞存在许多种不同的表现形式,普遍将其分为三类:反射型、存储型和DOM型,划分的依据是XSS漏洞的触发方式[10]。但因为DOM类型的本质依然是反射型XSS,故也有学者将XSS分为反射型和存储型两类。本文默认跨站脚本攻击分为三类。
3.2. XSS漏洞的分类
3.2.1. 反射型XSS
也称为非持久型XSS,是最常见也是使用最广的一种跨站脚本攻击[11]。攻击者通过等特定手法,诱使潜在受害者去访问包含恶意代码的URL,一旦受害者点击了这些专门设计的链接时,恶意脚本代码便会直接在受害者的主机浏览器上执行,如果Web应用程序对用户的输入过滤不全,就会很容易触发反射型XSS。因为反射型XSS只有当用户单击时才能触发,而且只执行一次,所以也被称为非持久性XSS,图1为反射型XSS攻击流程示意图。
图1为反射型XSS攻击流程示意图,可以看出反射型XSS攻击流程如下:
1) 用户在Web应用程序中登录网站,该程序保存用户的Cookie信息;
2) 攻击者将经过设计的含有恶意脚本代码的URL发送给目标用户,诱使用户点击URL;
3) 用户访问该URL后,URL中包含的恶意脚本代码便被发送到服务器;
王亚东
Figure 1. Process of reflect cross-site scripting attack 图1. 反射型XSS 攻击过程
4) 服务器解析用户请求,并将恶意脚本嵌入含有漏洞的HTML 页面中反馈给用户; 5) 用户的Web 应用程序接收到反馈后,执行页面中包含的脚本代码;
6) 恶意脚本在用户浏览器中执行后,用户的Cookie 信息等被发送到攻击者的服务器; 7) 攻击者获取用户信息,完成劫持会话等操作。 3.2.2. 存储型XSS
也称为持久型XSS 。因为存储型XSS 须要Web 应用程序向服务器发大于两次的HTTP 请求,故也称
作二阶跨站脚本攻击[12]。其中攻击者把恶意脚本代码上传并存储到服务器上是第一次HTTP 请求;目标用户链接到包含恶意代码的网页并触发HTTP 请求是第二次HTTP 请求。允许用户存储数据的Web 应用程序都可能会出现存储型XSS ,一般情况下,出现这种漏洞的原因都是网页或者Web 应用程序未对用户的输入信息进行过滤,导致脚本代码被直接存储到数据库。
图2为存储型XSS 攻击流程示意图。与反射型XSS 流程图相比可以看出,存储型XSS 攻击的第一步是将恶意脚本的代码存储到Web 服务器中,等待目标浏览存储恶意代码的页面即可;而反射型XSS 则要求将构造好的包含恶意脚本代码的URL 直接发送给目标,并诱使目标点击访问该URL 。由于存储型XSS 的这些特点,因此存储型XSS 更容易造成大规模的安全事件,还有可能对Web 服务器的安全性产生不利影响。
Figure 2. Process of store cross-site scripting attack 图2. 存储型XSS 攻击过程
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论