探索lodash的一个安全漏洞

博客详细探讨了在使用lodash库时遇到的高危安全漏洞——原型污染,并提供了深入的解决方案,包括如何避免此问题和最佳实践。

原文链接

近期打算准备重构我17年写的博客项目,打开项目看到了下图的一条安全漏洞的提示。

使用 lodash 这么多年,居然有高危漏洞,好奇心驱使我继续探索。

探索过程

What

在项目下执行:

- npm audit
复制代码

图中网站地址: www.npmjs.com/advisories/…]

图中 HackerOneReport 地址:hackerone.com/reports/310…

原来是原型污染。npm 网站上已经描述的很清楚了,是 'defaultsDeep'、'merge'、 'mergeWith' 三个函数在使用中可能会造成原型污染。

Why

尝试一把:

使用 ES6 assign 实现:

果然是有问题的。

How

相关补丁 commit: github.com/lodash/loda…

核心代码:

结论: 实现了一个 safeGet 的函数来避免获取原型上的值。

相关知识点

最佳实践

  • 尽量避免使用 for...in... 遍历对象

  • 遍历对象时先使用 Object.keys() 获取对象的所有 key,再进行遍历

  • 不要直接将一个未知变量作为对象的 key 使用

  • 在读取一个对象未知属性时,一定要使用 hasOwnProperty 判断之后再去读取

转载于:https://juejin.im/post/5c30abae51882525ec2000e9

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值