jQuery 安全模型解释

 

前言

jQuery是一个JavaScript UI框架,它为许多DOM操做功能提供了一个抽象层。它为开发人员提供了一个友好的界面,能够快速,动态地更新DOM,而无需从新加载整个页面。这是 jQuery 的优势及概念。javascript

但 jQuery 在有着诸多优势的同时,它自己也存一些安全问题,而全部的 jQuery 安全问题都围绕着那些被滥用的功能,jQurey 团队修改了行为来保护开发人员,下面来看看常见的 jQuery 安全问题的风险。html

1、jQuery基础 - $()函数

$() 与 jQuery() 函数的最多见的书写形式是同样的,它返回一个jQuery对象:本质上要写入DOM的内容块。java

在大多数状况下,jQuery函数将使用选择器,元素或对象做为参数。由哈希(#)表示的选择器是当前DOM中现有html内容的标识符。在下面的例子中,咱们将使用jQuery html()函数来修改#myDivTag选择器的元素:jquery

注意 “个人旧div标签文本!” 不显示。jQuery在运行时修改DOM来替换咱们的div元素的文本:ajax

 

再看看下面的例子:api

根据这个例子能够看到,jQuery函数相似于getElementById()函数。可是有一个重要的区别:jQuery接受的不单单是一个选择器ID,包括HTML和脚本内容。好比:跨域

 

 

2、jQuery 的 “XSS漏洞”

jQuery框架中没有已知的直接XSS漏洞(不包括jQuery插件)。但对于不受信任的内容引入到 jQuery 时,DOM (innerHTML,document.write()等)可能会被修改。浏览器

如下是最多见的漏洞代码示例:安全

在下面的页面中,咱们能够直接在浏览器DOM中引入任意脚本,甚至绕过Chrome的 XSS审核框架

这个XSS向量是很常见的,jQuery最终改变了选择器处理特性,为防止这种攻击。咱们阻止以“#”开始的HTML字符串,并从window.location.hash 中开始阻止 XSS

 

 

模拟XSS问题:Bug 9521 - $("#<img src=x onerror=...>")

在如下使用jQuery 1.6.1的例子中,模拟了XSS错误。这将以#字符开头,从location.hash属性中消耗的脚本:

代码成功执行。

在下面的示例中,咱们将jQuery升级到1.6.3并运行相同的代码:

代码再也不运行,也就是说 jQuery-1.6.3 这个版本能够阻止像刚刚这种:Bug 9521 - $("#<img src=x onerror=...>") 的问题。

 

模拟XSS问题:Bug 11290 - $("element[attribute='<img src=x onerror=...>'")

前面提到的 jQuery接受的不单单是一个选择器ID,还包括HTML和脚本内容。 jQuery可能会错误地识别一个包含 < 做为HTML片断的选择器,并尝试解析并建立相关的元素

如图:咱们引入了 jQuery-1.6.3.js 版本,并定义了<div data-val='<img src="x" onerror="console.log(xss!)">'></div>,最后执行结果以下:会发现 Bug 11290 代码被执行了

 但当我换成 jQuery-1.12.4.js 版本时,Bug 11290 代码不会执行,而会报错:

 

 

 3、jQuery的AJAX $ .get()响应处理弱点

jQuery ajax $ .get()函数(不要与.get()函数混淆)用于使您可能猜到的ajax GET请求。发如今1.12.0以前的版本会自动评估响应内容,若是包含在响应中,则可能会执行脚本。

此行为可能会促进应用程序中的两个潜在漏洞。

  1. 将跨域请求交给不受信任域的应用程序可能会无心中执行脚本,不然可能会被视为安全内容。
  2. 若是能够将脚本注入到数据源中,则能够在XSS攻击中利用对可信API端点的请求。

示例:当咱们在页面上发送请求:$.get('http://sakurity.com/jqueryxss') 时,攻击者可能会用 type="text/javascript" 来回应咱们,并写上恶意的执行代码,如:

模拟 $.get()响应 问题:jQuery issue 2432 - 3rd party $.get() auto executes if content type is text/javascript

test.html 页面:

在 https://sakurity.com/jqueryxss 网站上恶意弹出一个层

最终 test.html 页面执行效果:会执行并弹出  https://sakurity.com/jqueryxss 网站上声明的恶意脚本

 

总结:

像几乎全部的现代软件同样,jQuery旨在强大而多功能。有无数安全和合法的功能,在滥用时可能会致使安全漏洞这里描述的jQuery问题都是软件的结果,该软件按照设计运行,可是被不正确地执行。

 

另附上连接:http://research.insecurelabs.org/jquery/test/  可查看 jQuery 各版本关于 Bug 952一、Bug 11290、jQuery issue 2432 问题

 

本文参考文章连接:https://www.virtuesecurity.com/blog/jquery-security-model/

相关文章
相关标签/搜索