一. XSS概述
人们经常将(Cross Site Scripting)缩写为CSS,但这会与层叠样式表(Cascading Style Sheets,CSS)的缩写混淆。因此,有人将跨站脚本攻击缩写为XSS。
XSS(Cross Site Scripting)跨站脚本攻击,是一种 站应用程序的安全漏洞攻击。XSS攻击通常指的是
这些恶意 页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密 页内容、会话和cookie等各种内容。
跨站脚本攻击(XSS),是最普遍的Web应用安全漏洞。这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意脚本代码的执行,从而达到恶意攻击用户的目的。
攻击者可以使用户在浏览器中执行其预定义的恶意脚本,其导致的危害可想而知,如劫持用户会话,插入恶意内容、重定向用户、使用恶意软件劫持用户浏览器、繁殖XSS蠕虫,甚至破坏 站、修改路由器配置信息等。
XSS漏洞可以追溯到上世纪90年代。大量的 站曾遭受XSS漏洞攻击或被发现此类漏洞,如Twitter、Facebook、MySpace、Orkut、新浪微博和百度贴吧。研究表明,最近几年XSS已经超过缓冲区溢出成为最流行的攻击方式,有68%的 站可能遭受此类攻击。根据开放 页应用安全计划(Open Web Application Security Project)公布的2010年统计数据,在Web安全威胁前10位中,XSS排名第2,仅次于代码注入(Injection)。
: 1. 攻击者提交恶意代码。 2. 浏览器执行恶意代码。
XSS的重点不在于跨站,而在于脚本的攻击
二. 原理
HTML是一种超文本标记语言,通过将一些字符特殊地对待来区别文本和标记,例如,小于符 (<)被看作是HTML标签的开始,
所以,当这些特殊字符不能被动态页面检查或检查出现失误时,就将会产生XSS漏洞。
三. 特点
特点:隐蔽性强、发起容易等特点;
与钓鱼攻击相比,XSS攻击所带来的危害更大,通常具有如下特点:
- 由于XSS攻击在用户当前使用的应用程序中执行,用户将会看到与其有关的个性化信息,如账户信息或“欢迎回来”消息,克隆的Web站点不会显示个性化信息。
- 通常,在钓鱼攻击中使用的克隆Web站点一经发现,就会立即被关闭。
- 许多浏览器与安全防护软件产品都内置钓鱼攻击过滤器,可阻止用户访问恶意的克隆站点。
- 如果客户访问一个克隆的Web 银站点,银行一般不承担责任。但是,如果攻击者通过银行应用程序中的XSS漏洞攻击了银行客户,则银行将不能简单地推卸责任。
四. 类型
从攻击代码的工作方式可以分为三个类型:
- :最直接的危害类型,跨站代码存储在服务器(数据库)。经过后端,经过数据库。
- :反射型跨站脚本漏洞,最普遍的类型。用户访问服务器-跨站链接-返回跨站代码。经过后端,不经过数据库。
- :DOM(document object model文档对象模型),客户端脚本处理逻辑导致的安全问题。
基于DOM的XSS漏洞是指受害者端的 页脚本在修改本地页面DOM环境时未进行合理的处置,而使得攻击脚本被执行。在整个攻击过程中,服务器响应的页面并没有发生变化,引起客户端脚本执行结果差异的原因是对本地DOM的恶意篡改利用。
4.1 非持久型跨站
反射型XSS只是简单的把用户输入的数据从服务器反射给用户浏览器,要利用这个漏洞,攻击者必须以某种方式诱导用户访问一个精心设计的URL(恶意链接),才能实施攻击。
反射型XSS通常出现在搜索等功能中,需要被攻击者点击对应的链接才能触发,且受到XSS Auditor(chrome内置的XSS保护)、NoScript等防御手段的影响较大,所以它的危害性较存储型要小。
攻击流程:
4.3 DOM跨站(DOM XSS)
通过修改页面的DOM节点形成的XSS,称之为DOM Based XSS。
攻击案例:在这段代码中,submit按钮的onclick事件调用了xsstest()函数。而在xsstest()中,修改了页面的DOM节点,通过innerHTML把一段用户数据当作HTML写入到页面中,造成了DOM Based XSS。
漏洞原因:DOM型XSS是基于DOM文档对象模型的。对于浏览器来说,DOM文档就是一份XML文档,当有了这个标准的技术之后,通过JavaScript就可以轻松的访问DOM。当确认客户端代码中有DOM型XSS漏洞时,诱使(钓鱼)一名用户访问自己构造的URL,利用步骤和反射型很类似,但是唯一的区别就是,构造的URL参数不用发送到服务器端,可以达到绕过WAF、躲避服务端的检测效果。
五. 攻击方式
常用的XSS攻击手段和目的有:
六. 防御方法
6.1
XSS漏洞和著名的SQL注入漏洞一样,都是利用了Web页面的编写不完善,所以每一个漏洞所利用和针对的弱点都不尽相同。这就给XSS漏洞防御带来了困难,不可能以单一特征来概括所有XSS攻击。
传统的XSS防御在进行攻击鉴别时多采用特征匹配方式,主要是针对“javascript”这个关键字进行检索,但是这种鉴别不够灵活,凡是提交的信息中各有“javascript”时,就被硬性的被判定为XSS攻击。
6.2
Web页面开发者在编写程序时往往会出现一些失误和漏洞,XSS攻击正是利用了失误和漏洞,因此一种比较理想的方法就是通过优化Web应用开发来减少漏洞,避免被攻击:
- 1)用户向服务器上提交的信息要对URL和附带的的HTTP头、POST数据等进行查询,对不是规定格式、长度的内容进行过滤。
- 2)实现Session标记(session tokens)、CAPTCHA系统或者HTTP引用头检查,以防功能被第三方 站所执行。
- 3)确认接收的的内容被妥善的规范化,仅包含最小的、安全的Tag(没有javascript),去掉任何对远程内容的引用(尤其是样式表和javascript),使用HTTP only的cookie。
当然,如上操作将会降低Web业务系统的可用性,用户仅能输入少量的制定字符,人与系统间的交互被降到极致,仅适用于信息发布型站点。并且考虑到很少有Web编码人员受过正规的安全培训,很难做到完全避免页面中的XSS漏洞。
6.2.1 XSS 防御之 HTML 编码
应用范围:将不可信数据放入到 HTML 标签内(例如div、span等)的时候进行HTML编码。
编码规则:将 & < > ” ’ / 转义为实体字符(或者十进制、十六进制)。
示例代码:
HTML 有三种编码表现方式:十进制、十六进制、命名实体。例如小于 (<)可以编码为 “十进制> <”, “十六进制=> <”, “命名实体=> <” 三种方式。对于单引 (’)由于实体字符编码方式不在 HTML 规范中,所以此处使用了十六进制编码。
6.2.2 XSS 防御之 HTML Attribute 编码
应用范围:将不可信数据放入 HTML 属性时(不含src、href、style 和事件处理属性),进行 HTML Attribute 编码
编码规则:除了字母数字字符以外,使用 &#xHH;(或者可用的命名实体)格式来转义 ASCII值小于256所有的字符
示例代码:
6.2.3 XSS 防御之 JavaScript 编码
作用范围:将不可信数据放入事件处理属性、JavaScirpt值时进行 JavaScript 编码
编码规则:除字母数字字符外,请使用xHH格式转义ASCII码小于256的所有字符
示例代码:
6.2.4 XSS 防御之 URL 编码
作用范围:将不可信数据作为 URL 参数值时需要对参数进行 URL 编码
编码规则:将参数值进行 encodeURIComponent 编码
示例代码:
6.2.5 XSS 防御之 CSS 编码
作用范围:将不可信数据作为 CSS 时进行 CSS 编码
编码规则:除了字母数字字符以外,使用XXXXXX格式来转义ASCII值小于256的所有字符
示例代码:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!