Web安全-JQuery框架XSS漏洞浅析

简介: Web安全-JQuery框架XSS漏洞浅析

文章目录
框架简介
漏洞检测
漏洞复现
漏洞简述
漏洞分析
复现过程
修复建议
新版漏洞
漏洞复现
漏洞原理
修复方案
漏洞验证
框架简介
jQuery是一个快速、简洁的JavaScript框架,是一个丰富的JavaScript代码库。jQuery设计的目的是为了写更少的代码,做更多的事情。它封装 JavaScript 常用的功能代码,提供一种简便的 JavaScript 设计模式,优化 HTML 文档操作、事件处理、动画设计和 Ajax 交互。

据一项调查报告,在对 433000 个网站的分析中发现,77%的网站至少使用了一个具有已知安全漏洞的前端 JavaScript 库,而 jQuery 位列榜首,而且远远超过其他库。但事实上这些库有可用的不存在漏洞的最新版本,只是很少有开发人员会更新,一方面安全意识不够,另一方面更新需考虑兼容性问题。

漏洞检测
最简单粗暴的方法,直接使用火狐浏览器的插件:Retire.js,如下是 CSDN 网站主页存在的漏洞问题:

漏洞复现
漏洞简述
DOM型 XSS

在 JQuery 的诸多发行版本中,存在着 DOM-based XSS(跨站脚本攻击的一种) 漏洞,易被攻击者利用。漏洞原因在于过滤用户输入数据所使用的正则表达式存在缺陷,可能导致 LOCATION.HASH 跨站漏洞。这也是最为被大众熟知的 jQuery 的一个漏洞。此外,1.12.0 之前的 jQuery UI 库也可以通过对话框函数的 closeText 参数进行 DOM-based XSS 攻击。

漏洞编号

CVE-2016-7103、CVE-2015-9251、CVE-2014-6071、CVE-2012-6708、CVE-2011-4969 等
1
影响版本

(1)1.x系列版本等于或低于1.12的jQuery;
(2)2.x系列版本等于或低于2.2的jQuery。
1
2
漏洞分析
漏洞成因

jQuery 中过滤用户输入数据所使用的正则表达式存在缺陷,导致location.hash跨站脚本攻击。

jQuery 1.6.1版本

正则表达式如下:

quickExpr = /^(?:[^<](<[\w\W]+>)[^>]$|#([\w-]*)$)/,
1
该正则表达式缺陷引起的XSS攻击:
jQuery1.7.2 版本

正则表达式如下:

quickExpr = /^(?:[^#<](<[\w\W]+>)[^>]$|#([\w-]*)$)/,
1
该正则表达式存在的缺陷,容易引起DoM型XSS攻击:
jQuery 1.11.3版本

正则表达式为:

rquickExpr = /^(?:\s(<[\w\W]+>)[^>]|#([\w-]*))$/,
1
该正则表达式引起的XSS漏洞:

总结起来,DOM-based XSS 漏洞在各个版本都可成功的原因在于 jquery 本身对于正则表达式都无法完善地过滤危险字符,但前提是源码使用了$(location.hash)。故触发条件较为苛刻,且只可触发 DOM 型 XSS 漏洞。

复现过程
演示程序

<!DOCTYPE html>












JQuery with XSS Demo



  • Click here!


  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    1、将上述 html 文件保存到本地 phpstudy 网站目录下:
    2、启动 phpstudy:

    3、然后 IE 浏览器或者 Microsoft Edge 浏览器中访问 Demo 页面:
    4、点击网页链接,触发漏洞:

    【注意】此漏洞场景不适用于 谷歌浏览器和 火狐浏览器,可能因为浏览器自身安全策略问题。但是 Microsoft Edge 浏览器的爸爸(微软)并不把它当作一个漏洞,于是乎……

    修复建议
    1、临时解决方案:

    暂时隐藏 jQuery 版本信息,避免被攻击者识别出版本号,但不建议采取此办法;

    2、正式解决方案:

    建议将 jQuery 版本升级至 1.9.x 或以上版本 3.4.0,升级 jquery-ui 版本到 1.12.0 以上。不过升级有风险,因为版本兼容的问题,jQuery 官方推荐了 jQuery Migrate 库来解决 jQuery 升级问题。

    3、代码层解决方案:

    (1)过滤用户输入的内容

    检查用户输入的内容中是否有非法内容。如<>(尖括号)、"(引号)、 '(单引号)、%(百分比符号)、;(分号)、()(括号)、&(& 符号)、+(加号)等。
    1
    (2)严格控制输出

    可以利用下面这些函数对出现xss漏洞的参数进行过滤

    1、htmlspecialchars() 函数,用于转义处理在页面上显示的文本。
    2、htmlentities() 函数,用于转义处理在页面上显示的文本。
    3、strip_tags() 函数,过滤掉输入、输出里面的恶意标签。
    4、header() 函数,使用header("Content-type:application/json"); 用于控制 json 数据的头部,不用于浏览。
    5、urlencode() 函数,用于输出处理字符型参数带入页面链接中。
    6、intval() 函数用于处理数值型参数输出页面中。
    7、自定义函数,在大多情况下,要使用一些常用的 html 标签,以美化页面显示,在这样的情况下,要采用白名单的方法使用合法的标签显示,过滤掉非法的字符。
    1
    2
    3
    4
    5
    6
    7
    新版漏洞
    jQuery 官方在 2020年4月 发布了最新版本 3.5.0,主要修复了两个安全问题(漏洞编号 CVE-2020-11022、CVE-2020-11023),官方博客为:jQuery 3.5.0 Released!

    据NVD描述:在大于或等于 1.2 且在 3.5.0 之前的 jQuery 版本中,即使执行了消毒(sanitize)处理,也仍会执行将来自不受信任来源的HTML传递给 jQuery 的 DOM 操作方法(即 html()、.append()等),从而导致 XSS 漏洞。

    漏洞利用条件

    系统使用 jQuery 的 html()、append() 或 $('') 等方法处理用户输入;
    用户输入已经过“消毒”(sanitize)处理。
    漏洞复现
    对于此漏洞原作者搭建了在线环境,内置了三个 xss poc,点击 Append via .html() 按钮即可触发 XSS:
    点击触发漏洞:
    HTML 源码审计:

    <!DOCTYPE html>









    jQuery XSS Examples (CVE-2020-11022/CVE-2020-11023)


    PoCs of XSS bugs fixed in jQuery 3.5.0. You can find the details in my blog post: English / 日本語



    PoC 1



    <br> <style><style /><img src=x οnerrοr=alert(1)><br>

    PoC 2 (Only jQuery 3.x affected)



    <br> <img alt="<x" title="/><img src=x οnerrοr=alert(1)>"><br>

    PoC 3



    <br> <option><style></option></select><img src=x οnerrοr=alert(1)></style><br>



    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    分析下以上网页源码:

    1、首先使用如下代码模拟了一个开发场景,即将页面的所有 div 元素替换为根据 ID 取到的 sanitizedHTML:


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    2、虽然三个 poc 都使用了包含 onerror 事件的 img 标签,但其实它们是放在属性或 style 元素内部,因此会绕过 HTML 清理器。以 poc1 为例,根据此 id 取到的值如下:

    ,变成了:


    1
    闭合了
    1
    经过处理会变为:


    1
    根据HTML从前往后解析的顺序,会先解析一个标签,且不允许将大部分 HTML 标签包裹其中,导致

    目录
    相关文章
    |
    2月前
    |
    安全 测试技术 程序员
    web渗透-文件包含漏洞
    文件包含漏洞源于程序动态包含文件时未严格校验用户输入,导致可加载恶意文件。分为本地和远程包含,常见于PHP,利用伪协议、日志或session文件可实现代码执行,需通过合理过滤和配置防范。
    548 79
    web渗透-文件包含漏洞
    |
    30天前
    |
    安全 Linux iOS开发
    Burp Suite Professional 2025.10 发布 - Web 应用安全、测试和扫描
    Burp Suite Professional 2025.10 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
    210 3
    |
    2月前
    |
    存储 安全 前端开发
    Web渗透-文件上传漏洞-上篇
    文件上传漏洞常见于Web应用,因类型限制不严可致恶意文件执行。本文介绍前端检测、MIME类型、黑名单、.htaccess、空格、双写等多种绕过方式,并结合upload-labs靶场演示利用方法,提升安全防护认知。
    306 1
    Web渗透-文件上传漏洞-上篇
    |
    2月前
    |
    安全 中间件 应用服务中间件
    WEB渗透-文件上传漏洞-下篇
    本文详解文件上传安全漏洞,涵盖白名单绕过(如00截断、条件竞争)、图片木马制作与利用、以及IIS、Apache、Nginx等常见解析漏洞原理与防御。结合实战案例,深入剖析攻击手法与修复方案。
    186 1
    |
    2月前
    |
    存储 JavaScript 安全
    Web渗透-XSS漏洞深入及xss-labs靶场实战
    XSS(跨站脚本攻击)是常见的Web安全漏洞,通过在网页中注入恶意脚本,窃取用户信息或执行非法操作。本文介绍其原理、分类(反射型、存储型、DOM型)、测试方法及xss-labs靶场实战案例,帮助理解与防御XSS攻击。
    730 1
    Web渗透-XSS漏洞深入及xss-labs靶场实战
    |
    2月前
    |
    安全 NoSQL Shell
    web渗透-SSRF漏洞及discuz论坛网站测试
    SSRF(服务器端请求伪造)是一种安全漏洞,攻击者可诱使服务端发起任意请求,进而探测或攻击内网系统。常用于端口扫描、访问内部服务、读取本地文件等。常见防御包括限制协议、域名和IP,但可通过302跳转、短地址等方式绕过。
    202 1
    web渗透-SSRF漏洞及discuz论坛网站测试
    |
    1月前
    |
    开发框架 前端开发 Go
    【GoGin】(0)基于Go的WEB开发框架,GO Gin是什么?怎么启动?本文给你答案
    Gin:Go语言编写的Web框架,以更好的性能实现类似Martini框架的APInet/http、Beego:开源的高性能Go语言Web框架、Iris:最快的Go语言Web框架,完备的MVC支持。
    308 1
    |
    2月前
    |
    安全 程序员 数据库连接
    web渗透-CSRF漏洞
    CSRF(跨站请求伪造)是一种常见的Web安全漏洞,攻击者通过伪造用户请求,诱使其在已登录状态下执行非意愿操作。本文介绍CSRF原理、分类(站外与站内)、DVWA靶场搭建及防御措施,如同源策略与Token验证,提升安全防护意识。
    354 0
    web渗透-CSRF漏洞
    |
    2月前
    |
    安全 Linux PHP
    Web渗透-命令执行漏洞-及常见靶场检测实战
    命令执行漏洞(RCE)指应用程序调用系统命令时,用户可控制输入参数,导致恶意命令被拼接执行,从而危害系统安全。常见于PHP的system、exec等函数。攻击者可通过命令连接符在目标系统上执行任意命令,造成数据泄露或服务瘫痪。漏洞成因包括代码层过滤不严、第三方组件缺陷等。可通过参数过滤、最小权限运行等方式防御。本文还介绍了绕过方式、靶场测试及复现过程。
    824 0
    |
    2月前
    |
    安全 数据安全/隐私保护
    Web渗透-逻辑漏洞
    逻辑漏洞主要因程序逻辑不严谨或复杂导致处理错误,常见于越权访问、密码修改、支付等环节。漏洞统计显示,越权操作和逻辑漏洞占比最高,尤其账号安全风险突出,如任意重置密码、验证码暴力破解等。漏洞分类中,越权访问分为水平越权(同权限用户间数据访问)和垂直越权(跨权限数据访问)。
    123 0
    Web渗透-逻辑漏洞