
文章插图
如何防御在这里我们了解下这类攻击,如何从代码上更安全的编写,更好的防御这类漏洞 。漏洞发现的作者给出了2个解决方案,先来看看我是如何防御的 。
如果是我来解决这个问题的话,我会选择迭代对象的属性,直到查找到__proto__和prototype这2个属性名,如果出现就干掉 。但是这个方法还是有缺陷,一个是建立于黑名单,需要列入的属性太多了,例如Dos的话就要把tostring和valueof等方法列入,而且遇到私有属性覆盖的话,怎么确保参数,接口很多 。
原作者提出了3点:
- 使用Object.freeze来冻结对象,几乎所有的JavaScript对象都是Object的实例 。所以冻结Object.prototype即可 。具体大家可以去了解下es5就新增的Object.freeze方法,使用了这个方法,那么黑客就无法对prototype新增或者重写对应原型链上的方法,不过这样可能会导致一些隐性的bug产生,而且可能还不知道是哪里出错了 。
- 用map数据结构来代替自带的对象结构 。Es6就有map结构啦,这个map和Object的区别就是map的键可以是任意的对象类型,数组也好,对象也好 。
- 使用Object.create(null)(强烈推荐),使用这个方法就可以更好的防御原型链污染攻击了,因为Object.create(null)使得创建的新对象没有任何的原型链,是null的,不具备任何的继承关系,当你接受一个客户端的参数并且打算merge的话,可以使用此方法后去merge,这样的对象是比较安全的,客户端没办法通过原型链来污染攻击(因为压根就没原型链通往其他的对象) 。我们可以简单的通过一个实验来看下 。

文章插图

文章插图

文章插图
以上全部数据来源互联网,如有侵权,请及时与我们联系,我们将进行删除,谢谢
推荐阅读
- 揭开 JavaScript 引擎的面纱
- 雪容融是灯笼还是糖葫芦,雪容融是以什么为原型设计的
- 珍珠项链长度 珍珠项链直径
- 被钓鱼软件骗了怎么办 钓鱼链接诈骗
- JavaScript中面向对象&&原型的概念
- javascript实现web通讯的几种方式
- 什么是核心交换机的链路聚合、冗余、堆叠、热备份
- 周杰伦|周杰伦300多万NFT被黑客盗走 上链加密艺术就这?
- 恋恋不忘的原型小说 贺先生的恋恋不忘有小说吗
- 图解 MySQL 索引
