原文连接git
近期打算准备重构我17年写的博客项目,打开项目看到了下图的一条安全漏洞的提示。github
使用 lodash 这么多年,竟然有高危漏洞,好奇心驱使我继续探索。npm
在项目下执行:安全
- npm audit
复制代码
图中网站地址: www.npmjs.com/advisories/…]bash
图中 HackerOneReport 地址:hackerone.com/reports/310…函数
原来是原型污染。npm 网站上已经描述的很清楚了,是 'defaultsDeep'、'merge'、 'mergeWith' 三个函数在使用中可能会形成原型污染。网站
尝试一把:spa
使用 ES6 assign 实现:prototype
果真是有问题的。3d
相关补丁 commit: github.com/lodash/loda…
核心代码:
结论: 实现了一个 safeGet 的函数来避免获取原型上的值。
npm audit docs.npmjs.com/cli/audit
proto vs prototype: github.com/creeperyang…
尽可能避免使用 for...in... 遍历对象
遍历对象时先使用 Object.keys() 获取对象的全部 key,再进行遍历
不要直接将一个未知变量做为对象的 key 使用
在读取一个对象未知属性时,必定要使用 hasOwnProperty 判断以后再去读取