原文連接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 判斷以後再去讀取