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/


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

查看所有标签

猜你喜欢:

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

Java5.0Tiger程序高手秘笈

Java5.0Tiger程序高手秘笈

BrettMclaughlin / 东南大学出版社 / 2005-10 / 28.00元

代号为 “Tiger”的下一个 Java 版本,不只是个小改动版。在语言核心中有超过 100 项以上的变动,同时有大量的对 library 与 API 所做的加强,让开发者取得许多新的功能、工具与技术。但在如此多的变化下,应该从何处开始着手?也许可以从既长又无趣的语言规范说明书开始看起;或等待最少 500 页的概念与理论巨著出版;甚至还可以直接把玩新的 JDK 看看能够有什么发现;或者借由《Jav......一起来看看 《Java5.0Tiger程序高手秘笈》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

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

HSV CMYK互换工具