jQuery XSS漏洞学习

jQuery基础信息

jQuery简介

jQuery是一个快速、简洁的JavaScript框架,是一个丰富的JavaScript代码库。jQuery设计的目的是为了写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。
jQuery是一个JavaScript UI框架,它为许多DOM操作功能提供了一个抽象层。它为开发人员提供了一个友好的界面,可以快速,动态地更新DOM,而无需重新加载整个页面。这是 jQuery 的优点及概念。但 jQuery 在有着诸多优点的同时,它本身也存一些安全问题,而所有的 jQuery 安全问题都围绕着那些被滥用的功能。

jQuery各版本漏洞检测

版本漏洞检测网站:http://research.insecurelabs.org/jquery/test/
检测情况如下图所示:
jQuery XSS漏洞学习_第1张图片

jQuery 版本漏洞验证网站

网址链接:https://jsbin.com/?html,js,output
网站页面详情如下:
jQuery XSS漏洞学习_第2张图片
漏洞测试使用情况示例如下:
jQuery XSS漏洞学习_第3张图片

jQuery API中文文档

在jQuery的API中文文档中,可以了解到具体的API功能和具体的函数使用功能,对jQuery的使用显得更加的得心应手,对其功能和版本之间的功能变化也可以了解的更加详细。
网站地址:https://www.jquery123.com/
网站的具体信息如下图所示:
jQuery XSS漏洞学习_第4张图片

jQuery DOM XSS漏洞信息

概述

在JQuery的诸多发行版本中,存在着DOM-based XSS(跨站脚本攻击的一种)漏洞,易被攻击者利用。漏洞原因在于过滤用户输入数据所使用的正则表达式存在缺陷,可能导致location.hash跨站漏洞。此外,1.12.0之前的jQuery UI库也可以通过对话框函数的closeText参数进行DOM-based XSS攻击。
对应CVE漏洞编号:CVE-2011-4969、CVE-2012-6708、CVE-2014-6071、CVE-2015-9251、CVE-2016-7103

正则表达式不当引起的攻击

jQuery 1.6.1版本

正则表达式如下:

quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,

该正则表达式缺陷引起的XSS攻击
jQuery XSS漏洞学习_第5张图片

jQuery1.7.2 版本

正则表达式如下:

quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,

该正则表达式存在的缺陷,容易引起DoM型XSS攻击。
jQuery XSS漏洞学习_第6张图片

jQuery 1.11.3版本

正则表达式为:

rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,

该正则表达式引起的XSS漏洞。
jQuery XSS漏洞学习_第7张图片

jQuery 2.x版本

正则表达式如下:

rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,

通过调试即可发现 Chrome 未对 location.hash 部分进行 URL 编码处理进入函数,而 Safari 会经过 URL 编码进入函数。

rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,

jQuery XSS漏洞学习_第8张图片
依然可以使用html5 的一些特性,引发错误并onerror弹框:
jQuery XSS漏洞学习_第9张图片

修复建议

1、将jQuery版本进行升级。不过升级有风险,因为版本兼容性问题,jQuery官方推荐了jQuery Migrate库来解决jQuery升级问题。
2、找到具体存在问题得js包,一般是升级js包得版本或者直接移除存在漏洞得js包。但考虑到兼容性问题和功能实现得影响,临时得解决方案是隐藏js脚本具体得版本信息。
3、代码层解决方案
(1)为应用系统制定统一的、影响全局的危险字符黑名单,发现输入中存在危险字符时直接返回固定的错误页面。检查用户输入的内容中是否有非法内容。如<>(尖括号)、"(引号)、 '(单引号)、%(百分比符号)、;(分号)、()(括号)、&(& 符号)、+(加号)等。
(2)严格控制站点得输出,可以利用函数对出现的问题参数进行过滤

  • htmlspecialchars() 函数,用于转义处理在页面上显示的文本。
  • htmlentities() 函数,用于转义处理在页面上显示的文本。
  • strip_tags() 函数,过滤掉输入、输出里面的恶意标签。
  • header() 函数,使用header(“Content-type:application/json”); 用于控制 json 数据的头部,不用于浏览。
  • urlencode() 函数,用于输出处理字符型参数带入页面链接中。
  • intval() 函数用于处理数值型参数输出页面中。
  • 自定义函数,在大多情况下,要使用一些常用的 html 标签,以美化页面显示,在这样的情况下,要采用白名单的方法使用合法的标签显示,过滤掉非法的字符。

你可能感兴趣的:(漏洞研究学习,知识扩展,jquery,javascript,html)