Đượ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?
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
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
nguồn mở dựa trên xác minh _and_ tin cậy – dandavis