Làm cách nào để sửa các lỗ hổng npm theo cách thủ công?


96

Khi tôi chạy npm installnó nói found 33 vulnerabilities (2 low, 31 moderate) run `npm audit fix` to fix them, or `npm audit` for details.

Tuy nhiên, npm audit fixkết quả đầu raup to date in 11s fixed 0 of 33 vulnerabilities in 24653 scanned packages 33 vulnerabilities required manual review and could not be updated

Điều đó reviewcó nghĩa là nó không được người dùng yêu cầu sửa chữa?

Khi tôi chạy, npm auditnó cung cấp cho tôi danh sách các bảng, tương tự như sau:

┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Low           │ Prototype Pollution                                          │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ lodash                                                       │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in    │ >=4.17.5                                                     │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ browser-sync [dev]                                           │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ browser-sync > easy-extender > lodash                        │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/577                       │
└───────────────┴──────────────────────────────────────────────────────────────┘

Trong ví dụ này, phần khắc phục của trang được liên kết cho biết Update to version 4.17.5 or later.. Tuy nhiên, trong /node_modules/browser-sync/package.jsonđó có những dòng:

"devDependencies": {
    "lodash-cli": "4.17.5",
}

và không còn phụ thuộc vào lodash. Vì vậy, nó đã phải là v4.17.5. Tôi cũng đã kiểm tra /node_modules/lodash/lodash.jsonxem có var VERSION = '4.17.10';dòng nào. Trong /node_modules/lodash/package.jsonđó có những dòng này:

  "_from": "lodash@^4.17.4",
  "_id": "lodash@4.17.10",

Tôi tin rằng phiên bản được hiển thị trong "_id", không phải trong "_from", vì vậy các phiên bản là chính xác nhưng lỗ hổng bảo mật vẫn xuất hiện trong danh sách kiểm tra.

Tôi vẫn là người mới trong node.js và những thông báo đó khiến tôi bối rối rất nhiều. Có cách nào để khắc phục thủ công hoặc thoát khỏi những thông báo đó, tôi không thể làm gì với?


Câu trả lời:


33

lodash-cliin devDependencieskhông ảnh hưởng đến cách browser-synchoạt động trong dự án của bạn, devDependenciesđược bỏ qua khi một gói được cài đặt dưới dạng phụ thuộc.

Có gì auditbáo cáo cho biết là nó easy-extenderlodashphụ thuộc:

browser-sync > easy-extender > lodash        

phụ thuộc vào Lodash 3 , trong khi sự cố đã được khắc phục trong Lodash 4. Sự cố có thể được khắc phục bằng cách phân nhánh easy-extender, cập nhật nó và cài đặt nó thay vì gói từ đăng ký công khai NPM. Nhưng không có vấn đề thực sự với sự phụ thuộc này.

audittầm quan trọng của báo cáo nên được đánh giá theo cách thủ công. Ngay cả khi sự phụ thuộc lồng nhau có rủi ro bảo mật, điều này không có nghĩa là một tính năng gây ra rủi ro này đã được sử dụng. Điều này cũng không có nghĩa là ngay cả khi nó được sử dụng, nó sẽ dẫn đến rủi ro thực sự do cách nó được sử dụng.

browser-synclà công cụ phát triển không được sử dụng trong sản xuất, không có quá nhiều tình huống mà các lỗ hổng của nó có thể bị khai thác. Và Prototype Pollution hoàn toàn không phải là một lỗ hổng, chỉ cần một thông báo rằng một gói không tuân theo các thông lệ tốt, nó có thể bị bỏ qua.

Nói chung, đây là cách để sửa các lỗ hổng được báo cáo:

  • Kiểm tra sự tỉnh táo
  • Trong trường hợp đó là một vấn đề thực sự, hãy kiểm tra kho lưu trữ của gói dễ bị tấn công để biết các vấn đề PR hiện có
  • Trong trường hợp không có, hãy gửi một vấn đề
  • Fork một kho lưu trữ hoặc sử dụng PR hiện có làm phụ thuộc git cho đến khi nó được sửa trong bản phát hành NPM
  • Trong trường hợp phụ thuộc lồng nhau, hãy thực hiện việc này ở một số cấp độ lồng nhau

Hầu hết các trường hợp dự kiến ​​rằng bạn sẽ không thăng tiến vượt quá kiểm tra độ tỉnh táo.

patch-packagecó thể giúp vá các phần phụ thuộc lồng nhau tại chỗ nhưng điều này sẽ không ảnh hưởng đến auditbáo cáo.


Tôi đã không chú ý đến phần Đường dẫn và nó thực sự sử dụng lodash v3.10.1, cảm ơn. Nhưng đồng bộ hóa trình duyệt chỉ là một ví dụ, một trong những ví dụ cuối cùng. Vì vậy, tôi có thể bỏ qua 2 lỗ hổng thấp, nhưng tôi có thể bỏ qua 31 lỗ hổng vừa phải không? Tôi cho rằng tôi không nên sửa đổi bất cứ điều gì trong đó node_modules, vì vậy việc rèn và sửa có phải là cách duy nhất để loại bỏ chúng? Và là người dùng mới, tôi không có khả năng làm điều đó? Tôi có nên đưa ra các gói phát triển về chúng không?
Jakupov

4
nhưng tôi có thể bỏ qua 31 cái vừa phải không? - đây là những gì 'kiểm tra sự tỉnh táo' là về, sử dụng phán đoán của bạn. Bạn càng chú ý đến những gì các báo cáo này thực sự nói, bạn càng có thể trở thành nhà phát triển tốt hơn, về mặt bảo mật. Tôi có nên đưa ra các gói phát triển về chúng không? - bạn có thể nên (ít nhất là nên im lặng audit), câu trả lời trả lời rằng. Mọi người đã sống mà không cần npm auditbằng cách nào đó. Khả năng chúng gây ra các vấn đề bảo mật thực sự cho ứng dụng là rất thấp, nhưng bạn không biết chúng là gì và chúng được sử dụng như thế nào trong ứng dụng của bạn, tôi không thể đảm bảo điều đó.
Estus Flask

Cảm ơn! Mất thời gian để viết bình luận nên không xem phần đã chỉnh sửa trước khi bình luận.
Jakupov

5

Nếu bạn hoàn toàn chắc chắn muốn bỏ qua kiểm tra, bạn có thể làm như vậy bằng cách bổ sung - không kiểm tra

 npm install --no-audit

2

'sửa lỗi kiểm tra npm' sẽ tăng phiên bản phụ thuộc trong package.json, điều này có thể dẫn đến việc phá mã. Vì vậy, cách tốt hơn là mở package-lock.json và cập nhật phiên bản phụ thuộc / phụ thuộc lên phiên bản yêu cầu. Duy trì package-lock.json trong kho lưu trữ.

Đôi khi các lỗ hổng là từ các gói của nhà phát triển, Trong trường hợp đó, hãy bỏ qua những lỗ hổng đó vì chúng không được phát hiện trong quá trình sản xuất.


-3

Phần lớn sự cố xảy ra trong hệ thống của tôi là do gói npm. Tôi đã thử,

npm un npm

Bạn không phải cài đặt lại.

Chỉ cần chạy lại chương trình. Nó đã làm việc cho tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.