2016-08-18 26 views
6

Được biết NodeJS phổ biến như thế nào và cách NPM hoạt động ... cách tốt nhất để đảm bảo bạn không bao giờ cài đặt gói phần mềm độc hại không an toàn là gì? Với tôi điều này có vẻ là một lỗ hổng lớn trong kiến ​​trúc, chỉ dựa vào đánh giá của người dùng, nhận xét trên các trang như StackOverflow, blog cá nhân, v.v. Tôi đã tìm kiếm một chút và tất cả những gì tôi có thể tìm thấy là "kế hoạch" để xóa người dùng vi phạm khi khiếu nại được gửi cho biết người dùng đã vi phạm quy tắc ứng xử.NodeJS & NPM: Bảo mật gói

NPM Quy tắc ứng xử https://www.npmjs.com/policies/conduct

Sau đây là cách bạn xuất bản một gói ... https://docs.npmjs.com/getting-started/publishing-npm-packages

Vì vậy, tôi bắt đầu suy nghĩ về những loại điều xấu ai đó có thể làm ... có lẽ tạo ra một rất hữu ích gói, sau đó trojan ngựa nó với một sự phụ thuộc vào một gói mà làm điều gì đó xấu. Thậm chí nếu tôi (như trình cài đặt) xem xét các gói cá nhân tôi cài đặt, tôi có lẽ sẽ không bao giờ bắt mã vi phạm, đặc biệt là nếu mã đã được obfuscated, như thế này:

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

Mã này chỉ đơn giản lặp lại/etc/passwd tập tin theo tiêu chuẩn của bạn. Chỉ có bấy nhiêu thôi. Chứng minh điều đó bằng cách chỉ chạy điều này:

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

Những người bạn đánh bắt eval, tốt cho bạn! Tôi có thể bọc này rất nhiều cách khác nhau mà không có một eval mặc dù, vì vậy điều này chỉ nên được lấy làm ví dụ.

Vì vậy, với tất cả điều đó đã nói ... cộng đồng đang làm gì để đối phó với tình huống này? Tôi có thể tìm thêm thông tin về cách giữ an toàn cho hệ thống của mình ở đâu?

+0

Toàn bộ an ninh cộng đồng dựa trên niềm tin và hy vọng rằng mọi thứ sẽ ổn thôi. – zerkms

+0

Tôi nghĩ thực tế là tất cả các gói phải có nguồn mở đều gây khó khăn cho ai đó lẻn vào thứ gì đó độc hại. Ngay cả khi nhìn vào mã mà không có eval, văn bản không có mục đích rõ ràng là đáng báo động. Bạn cũng có thể xem qua số lượng người phụ thuộc của gói và cũng kiểm tra repo của mình đối với các vấn đề được đăng, số lượng người đã đọc mã đủ để gửi yêu cầu kéo, v.v. – csander

+0

nguồn mở dựa trên xác minh _and_ tin cậy – dandavis

Trả lời

3

Một trong những giải pháp có thể đảm bảo rằng các gói bạn cài đặt từ npm là an toàn là sử dụng nsp: tiện ích dòng lệnh do nhóm Bảo mật Node (nodesecurity.io) cung cấp.

$ npm install -g nsp 

Sau đó, trong thư mục của dự án của bạn (nơi package.json nằm):

$ nsp check 

Sẽ tạo ra một báo cáo với các lỗ hổng có thể, đây là ví dụ:

enter image description here

+1

Có phải bảo mật 'nsp' không? : p – undefined

+1

câu hỏi hay. thats the guy chính đằng sau sáng kiến ​​này: https://medium.com/node-security/announcing-the-node-security-platform-28c99f872688#.ty9fgckws –

+0

Dagnabit. Bạn đánh tôi. Tôi tìm thấy điều này và có nghĩa là để trả lời câu hỏi của riêng tôi. :) Dù sao, tôi chấp nhận câu trả lời của bạn ... nhưng tôi hoàn toàn chống lại -g trên cài đặt cho tất cả mọi thứ khá nhiều, trừ khi bạn đã cài đặt nvm. [Xem lý do tại sao] (http://brokenpromises.io/2016/08/15/where-do-i-start/). Tôi chỉ mất 3 giờ để hoàn thành một số hack -g trước đó hôm nay tbh. – PRS

Các vấn đề liên quan