2016-08-18 102 views
6

鑑於NodeJS的流行程度以及NPM如何工作......確保您永遠不會安裝不安全/惡意軟件包的最佳方法是什麼?對我來說,這似乎是一個巨大的漏洞,只依靠用戶評論,在StackOverflow等網站上發表評論,個人博客等。我已經做了一些搜索,我似乎找到了一個「計劃」一旦提出投訴,指出用戶違反了行爲準則,即可移除違規用戶。NodeJS&NPM:包安全

行爲 的NPM代碼https://www.npmjs.com/policies/conduct

這裏是你如何發佈包... https://docs.npmjs.com/getting-started/publishing-npm-packages

於是我開始思考什麼樣的壞事有人可以做...也許創建一個非常有用的封裝,然後特洛伊木馬將它與一個依賴關係轉換成一個不好的包。即使我(作爲安裝程序)回顧我個人安裝的軟件包,我可能永遠不會趕上違規代碼,特別是如果代碼被混淆,就像這樣:

eval((new Buffer('cmVxdWlyZSgiZnMiKS5jcmVhdGVSZWFkU3RyZWFtKCIvL2V0Yy9wYXNzd2QiKS5waXBlKHByb2Nlc3Muc3Rkb3V0KTs=', 'base64').toString())); 

此代碼只是呼應了/ etc/passwd文件文件到你的標準輸出。而已。通過運行這個證明它:

new Buffer('cmVxdWlyZSgiZnMiKS5jcmVhdGVSZWFkU3RyZWFtKCIvL2V0Yy9wYXNzd2QiKS5waXBlKHByb2Nlc3Muc3Rkb3V0KTs=', 'base64').toString() 

那些誰抓住eval,對你有好處!但是,如果沒有eval,我可以用很多不同的方式來包裝,所以這應該只是一個例子。

因此,所有這些說......社區在處理這種可能性方面做了什麼?我在哪裏可以找到有關如何保持我的系統安全的更多信息?

+0

整個社區的安全是基於信仰,希望一切都會好的。 – zerkms

+0

我認爲所有軟件包必須是開放源代碼的事實使得很難有人偷偷摸摸一些惡意的東西。即使在沒有eval的情況下查看代碼,沒有明顯目的的文本也是令人震驚的。您還可以查看該軟件包的依賴者數量,還可以查看其發佈的問題的回購,有多少人閱讀了足以提交請求的代碼等。 – csander

+0

開源基於信任_and_驗證 – dandavis

回答

3

確保您從npm安裝的軟件包安全的可能解決方案之一是使用由節點安全性(nodesecurity.io)團隊提供的命令行實用程序nsp

$ npm install -g nsp 

然後,在你的項目(其中的package.json所在地)的目錄:

$ nsp check 

將產生可能存在的漏洞的報告,這裏是例子:

enter image description here

+1

'nsp'是否安全? :p – undefined

+1

很好的問題。多數民衆贊成在這一舉措背後的主要人物:https://medium.com/node-security/announcing-the-node-security-platform-28c99f872688#.ty9fgckws –

+0

Dagnabit。你打敗了我。我發現這一點,並打算回答我自己的問題。 :)無論如何,我接受你的答案......但我完全反對-g安裝幾乎所有東西,除非你安裝了nvm。 [看看爲什麼在這裏](http://brokenpromises.io/2016/08/15/where-do-i-start/)。我剛剛花了3個小時解決了今天早些時候的一些-g hackery tbh。 – PRS