jQuery 安全模型解释

栏目: jQuery · 发布时间: 5年前

内容简介:jQuery是一个JavaScript UI框架,它为许多DOM操作功能提供了一个抽象层。它为开发人员提供了一个友好的界面,可以快速,动态地更新DOM,而无需重新加载整个页面。这是 jQuery 的优点及概念。但 jQuery 在有着诸多优点的同时,它本身也存一些安全问题,而所有的 jQuery 安全问题都围绕着那些被滥用的功能,jQurey 团队修改了行为来保护开发人员,下面来看看常见的 jQuery 安全问题的风险。$() 与 jQuery() 函数的最常见的书写形式是一样的,它返回一个jQuery对象

前言

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

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

一、 jQuery基础 - $()函数

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

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

jQuery 安全模型解释

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

jQuery 安全模型解释

再看看下面的例子:

jQuery 安全模型解释

根据这个例子可以看到, jQuery函数类似于getElementById()函数。 但是有一个重要的区别: jQuery接受的不仅仅是一个选择器ID,包括HTML和脚本内容。 比如:

jQuery 安全模型解释

二、jQuery 的 “XSS漏洞”

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

以下是最常见的漏洞代码示例:

jQuery 安全模型解释

在下面的页面中,我们可以直接在浏览器DOM中引入任意脚本,甚至绕过Chrome的 XSS审核

jQuery 安全模型解释

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

jQuery 安全模型解释

模拟XSS问题:Bug 9521 - $("#")

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

jQuery 安全模型解释

代码成功执行。

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

jQuery 安全模型解释

代码不再运行,也就是说 jQuery-1.6.3 这个版本可以阻止像刚刚这种:Bug 9521 - $("#") 的问题。

模拟XSS问题: Bug 11290 - $("element[attribute=''")

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

jQuery 安全模型解释

如图:我们引入了 jQuery-1.6.3.js 版本,并定义了

,最后执行结果如下:会发现 Bug 11290 代码被执行了

jQuery 安全模型解释

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

jQuery 安全模型解释

jQuery 安全模型解释

三、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 页面:

jQuery 安全模型解释

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

jQuery 安全模型解释

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

jQuery 安全模型解释

总结:

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

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

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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Data Structures and Algorithm Analysis in Java

Data Structures and Algorithm Analysis in Java

Mark A. Weiss / Pearson / 2006-3-3 / USD 143.00

As the speed and power of computers increases, so does the need for effective programming and algorithm analysis. By approaching these skills in tandem, Mark Allen Weiss teaches readers to develop wel......一起来看看 《Data Structures and Algorithm Analysis in Java》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具