加入收藏 | 设为首页 | 会员中心 | 我要投稿 宁德站长网 (https://www.0593zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 安全 > 正文

什么是JavaScript原型链污染

发布时间:2023-12-29 15:57:56 所属栏目:安全 来源:DaWei
导读: 这篇文章给大家分享的是“JS原型链污染攻击有何影响,怎么防止”,对大家学习和理解有一定的参考价值和帮助,有这方面学习需要的朋友,接下来就跟随小编一起学习一下吧。

什么
这篇文章给大家分享的是“JS原型链污染攻击有何影响,怎么防止”,对大家学习和理解有一定的参考价值和帮助,有这方面学习需要的朋友,接下来就跟随小编一起学习一下吧。

什么是原型语言

1.只有对象,没有类;对象继承对象,而不是类继承类。

2.“原型对象”是核心概念。原型对象是新对象的模板,它将自身的属性共享给新对象。一个对象不但可以享有自己创建时和运行时定义的属性,而且可以享有原型对象的属性。

3.每一个对象都有自己的原型对象,所有对象构成一个树状的层级系统。底层节点的顶端物件,就是语言原生的物件,唯独没有样本的物件,其它都是直接或间接地传承它的特性。

什么是JavaScript原行链污染

原型链污染来自一个CVE(https://github.com/jquery/jquery/pull/4333),这个CVE是一个在jquery中修复的漏洞,但是这个漏洞广义地推广的话,受影响的范围应该是一切使用了ecmascript的应用,无论前后端。关于这个漏洞,是修复了jQuery的$.extend(true…)方法,在jQuery中,这个方法用于将一个或多个对象的内容合并到目标对象。所以你永远不知道有没有人会不会写出一些类似一下的代码

当我们可控$.extend的参数的时候,我们就可以覆盖对象的__proto__或者prototype方法,从而控制整个原型链的最顶端的方法,重写该方法将覆盖子对象或者函数的方法。

在npmjs官方搜下对象操作的库可以看到一大堆,例如“xtend”、 “deepmerge”、 “webpack-merge”、 “merge2”、 “lodash.merge”。假如一些应用用到上述这些方式,但是参数并没有做任何的改动。

漏洞范围影响

提出这个Javascript原型链污染攻击的作者写了一个pdf,在该pdf中,作者不仅做了漏洞的成因分析,还针对此漏洞做了受害范围分析,他在github上搜索了部分的组件,这些组件都是可以操作对象,一般都是对象合并操作的,较为底层,因此也会有大量的应用于这些组件。例如“hoek”,“lodash”,“defaults-deep”等修复了这个原型链污染的可能性,当然还有一些组件他没统计到,例如“xtend”之类的,光weekly download的数量就有“12,097,425”。

如何防御

在这里我们了解下这类攻击,如何从代码上更安全的编写,更好的防御这类漏洞。

如果是我来解决这个问题的话,我会选择迭代对象的属性,直到查找到__proto__prototype这2个属性名,如果出现就干掉。但是这个方法还是有缺陷,一个是建立于黑名单,需要列入的属性太多了,例如Dos的话就要把tostring和valueof等方法列入,而且遇到私有属性复盖的话,怎么确保参数,接口很多。

到此这篇关于“JS原型链污染攻击有何影响,怎么防止”的文章就介绍到这了,更多相关JS原型链污染攻击有何影响,怎么防止内容,小编将为大家输出更多高质量的实用文章!

(编辑:宁德站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章