lodashのセキュリティ・ホールを探る
1163 ワード
テキストリンク
最近、私が17年間書いたブログプロジェクトを再構築するつもりで、プロジェクトを開くと下図のセキュリティホールのヒントが見えました.
lodashを何年も使っていたのに、意外にも高危険な抜け穴があり、好奇心が私を探求し続けた.
プロジェクトの下で実行:
図中のウェブサイトの住所:www.npmjs.com/advisories/…]
図中のHackerOneReportアドレス:hackerone.com/reports/310…
原型汚染だったのか.npmのウェブサイトでは、「defaultsDeep」、「merge」、「mergeWith」の3つの関数が使用中にプロトタイプ汚染をもたらす可能性があることが明らかになった.
試してみる:
ES 6 assignを使用して実装:
やはり問題があります.
関連パッチ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で判断してから を読み込む.
転載先:https://juejin.im/post/5c30abae51882525ec2000e9
最近、私が17年間書いたブログプロジェクトを再構築するつもりで、プロジェクトを開くと下図のセキュリティホールのヒントが見えました.
lodashを何年も使っていたのに、意外にも高危険な抜け穴があり、好奇心が私を探求し続けた.
探索プロセス
What
プロジェクトの下で実行:
- npm audit
図中のウェブサイトの住所:www.npmjs.com/advisories/…]
図中のHackerOneReportアドレス:hackerone.com/reports/310…
原型汚染だったのか.npmのウェブサイトでは、「defaultsDeep」、「merge」、「mergeWith」の3つの関数が使用中にプロトタイプ汚染をもたらす可能性があることが明らかになった.
Why
試してみる:
ES 6 assignを使用して実装:
やはり問題があります.
How
関連パッチcommit:github.com/lodash/loda…
コアコード:
結論:safeGetの関数を実現し,プロトタイプ上の値の取得を回避した.
関連知識点
ベストプラクティス
転載先:https://juejin.im/post/5c30abae51882525ec2000e9