• jQuery 安全模型解释


     

    前言

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

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

    一、jQuery基础 - $()函数

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

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

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

     

    再看看下面的例子:

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

     

    二、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 代码不会执行,而会报错:

     三、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 9521、Bug 11290、jQuery issue 2432 问题

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

  • 相关阅读:
    python的argparse模块
    Robotframework之SSHLibrary库
    Python 中的 getopt 模块
    Python list 列表
    Samba windows 10 share: mount error(112): Host is down
    安装两个版本的python安装包,后安装的python程序打开时闪退
    NetScaler VPX configration
    drupal smtp could not connect to smtp
    drupal7 判断用户是否具有某个权限
    微信支付报错:time_expire时间过短,刷卡至少1分钟,其他5分钟]
  • 原文地址:https://www.cnblogs.com/aichenxy/p/7207319.html
Copyright © 2020-2023  润新知