Cách thích hợp để khắc phục lỗ hổng bảo mật tiềm ẩn trong phần phụ thuộc được xác định trong package-lock.json


88

Github đã cho tôi lỗi này trên một trong các kho lưu trữ của tôi.

We found a potential security vulnerability in one of your dependencies.
A dependency defined in ./package-lock.json has known security vulnerabilities 
and should be updated.

Phần phụ thuộc không được xác định trong package.jsontệp của chúng tôi . Theo sự hiểu biết của tôi, việc xóa package-lock.jsontệp và tạo lại tệp là không tốt . Tuy nhiên, tôi không thể thấy bất kỳ cách nào khác để khắc phục sự cố này. Nếu tôi loại bỏ lỗ hổng bảo mật này, nó sẽ xuất hiện trở lại vài ngày sau đó. Có ý kiến ​​gì không? Cảm ơn!



Câu trả lời:


67

Mới: bây giờ, với npm @ 6 bạn có thể chạy trực tiếp

npm audit fix

Câu trả lời cũ:

Bạn nên cố gắng xác định tên của gói có vấn đề, sau đó chạy

npm install package-name

thay thế tên gói, rõ ràng.

Thao tác này sẽ cài đặt phiên bản mới nhất của gói và rất thường xuyên, phiên bản mới nhất đã khắc phục sự cố bảo mật. Nếu bạn có hạn chế về phiên bản (ví dụ: 1.2), bạn luôn có thể cố gắng:

npm install package-name@^1.2

và phiên bản vá mới nhất sẽ được cài đặt


1
... và để 'xác định tên gói có vấn đề', bạn có thể chạy npm ls vulnerability-name. Phần này liệt kê các yếu tố hỗ trợ lỗ hổng bảo mật, sau đó bạn có thể cập nhật / cài đặt. (như đã đề cập khá rõ ràng trong câu trả lời của @ RileyManda)
Sjeiti 13/09/18

1
Bản sửa lỗi kiểm toán npm khắc phục sự cố này cho tôi ngay bây giờ.
Kaito

9
Nó sẽ thêm package-namevào dependenciescủa package.json. Tôi không muốn điều này.
slideshowp2

7

Để giải quyết điều này:

Giải pháp1: Đầu tiên tìm lỗ hổng bảo mật: Sử dụng terminal: cd vào dự án của bạn , sau đó chạy "npm ls hoek"

Và cuối cùng: npm cài đặt bcrypt @ mới nhất

Sau đó đẩy dự án đã cập nhật sang git. (Tức là thực hiện một cam kết mới).

Giải pháp 2:

nếu tùy chọn / giải pháp đầu tiên không giải quyết được sự cố. Thay đổi phiên bản theo cách thủ công trong package-lock.json của bạn. Thay đổi phiên bản của bạn theo cách thủ công từ 2.16.3 thành 4.2.1

"hoek": {
      "version":  "4.2.1",
      "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
      "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
      "dev": true

Sau đó, cập nhật dự án của bạn trên GitHub (cam kết / đẩy) Chỉ cần đảm bảo mọi phiên bản hoek xuất hiện trong phiên bản package-lock.json của bạn được thay đổi thành 4.2.1

Ngoài ra, nếu bạn có thể tìm ra cách thay đổi phiên bản hoek / cập nhật hoek bằng cách sử dụng npm, sẽ làm mọi thứ đơn giản hơn nhiều. ( Chẳng hạn như: npm update @ hoek..version ) .. hoặc gỡ cài đặt phần phụ thuộc cụ thể rồi cài đặt lại bằng bower hoặc npm.


4

Tôi đang gặp vấn đề tương tự với lỗ hổng bảo mật lodash, trong một dự án mà tôi đang xây dựng bằng sợi. Github đã gắn cờ đây là những lo ngại về bảo mật.

Tôi đã thử câu trả lời từ @rileymanda ở trên, sử dụng terminal: cd vào dự án, sau đó chạy npm ls lodash.

Điều này phát hiện ra rằng trong trường hợp của tôi, lỗi là trong các kịch bản phản ứng . Google nhanh chóng cho các vấn đề với tập lệnh phản ứng và lodash đã phát hiện ra rằng đây là một vấn đề đã biết.

Tôi đã thử nhiều thứ khác nhau để khắc phục thông qua sợi - tất cả đều không thành công. npm ls lodashvẫn hiển thị phiên bản lodash dễ bị tấn công đang được sử dụng.

Sau khi đọc blog của Matt Turnbull về những cải tiến đối với npm, tôi đã chuyển từ sợi trở lại npm. (Xóa yarn.lock, xóa ./node_modules. Chạy npm install). npm ls lodashhiện đã cho thấy các phiên bản phụ thuộc mới nhất đang được sử dụng - Hurray! Đã cam kết với github và giờ rất vui vì lỗ hổng bảo mật đã biến mất.

Có vẻ như sợi có thể đang vật lộn để giải quyết các vấn đề như vậy (hoặc không có ý định).

Nếu bạn gặp vấn đề này khi xây dựng bằng sợi, hãy thử chuyển [quay lại] thành npm!


3

Theo hiểu biết của tôi, việc xóa tệp package-lock.json và tạo lại nó là không tốt.

Tuy nhiên, đây là những gì thường được thực hiện trong trường hợp này.
Xem ví dụ vấn đề angle / angle-cli 8534 , được giải quyết bằng PR 8535 .
Đó dẫn một dự án phụ thuộc như frees-io/freestyle-opscenter-webclientđể cập nhật nó package-lock.json: PR 31 .


Tái sinh của gói-lock.json dường như không giải quyết được probelm
xianshenglu

@xianshenglu Được rồi, tôi sẽ để câu trả lời ở đó trong trường hợp nó có ích cho người khác.
VonC

Tôi nhận được cảnh báo về việc khóa gói trong một cam kết cũ. Làm thế quái nào tôi có thể sửa chữa một cái gì đó trong lịch sử mà không viết lại nó?
pishpish

@destoryer đó tôi không biết: thử và đặt một câu hỏi mới với chi tiết hơn (hệ điều hành, phiên bản của NPM, ...)
VonC

1
Điều đó đã khắc phục sự cố của tôi. Cảm ơn vì tiền hỗ trợ.
Phong phú


1

các lỗ hổng bảo mật đã biết và cần được cập nhật.

Kể từ ngày 23 tháng 5 năm 2019, bạn hiện có " Dependabot: Các bản sửa lỗi bảo mật tự động "

Thông qua việc tích hợp Dependabot, chúng tôi đã phát hành các bản sửa lỗi bảo mật tự động dưới dạng bản beta công khai.

Các bản sửa lỗi bảo mật tự động là các yêu cầu kéo do GitHub tạo ra để sửa các lỗ hổng bảo mật.
Chúng tự động hóa một phần tẻ nhạt của quy trình làm việc và giúp các nhà phát triển dễ dàng cập nhật các phần phụ thuộc của họ.

Xem thêm tại "Định cấu hình các bản sửa lỗi bảo mật tự động "

Lưu ý: Các bản sửa lỗi bảo mật tự động có sẵn trong phiên bản beta và có thể thay đổi.

Bạn có thể bật các bản sửa lỗi bảo mật tự động cho bất kỳ kho lưu trữ nào sử dụng cảnh báo bảo mật và biểu đồ phụ thuộc.
Chúng tôi sẽ tự động bật các bản sửa lỗi bảo mật tự động trong mọi kho lưu trữ sử dụng cảnh báo bảo mật và biểu đồ phụ thuộc trong vài tháng tới, bắt đầu từ tháng 5 năm 2019.


Tôi đã có kết quả hỗn hợp với bot đó. Tôi thích làm thủ công npm auditvà / hoặc npm audit fix.
Fuhrmanator

@Fuhrmanator Được. Bạn đã đề cập đến medium.com/coinmonks/… trong một bình luận trước đây?
VonC

0

Điều này làm việc cho tôi. gỡ cài đặt tất cả các phụ thuộc của bạn và cài đặt lại

Ví dụ

từ package.json xem danh sách các phụ thuộc của bạn

{
"name": "ebook-saler",
  "version": "1.0.0",
  "description": "App for selling ebooks",
  "main": "app.js",
  "scripts": {
    "start": "node app.js"
  },
  "author": "Md Shayon",
  "license": "ISC",
  "dependencies": {
    "body-parser": "^1.19.0",
    "express": "^4.17.1",
    "express-handlebars": "^3.1.0",
    "hoek": "^6.1.3",
    "stripe": "^7.5.0"
  }
}

Làm theo lệnh cho việc này

npm uninstall body-parser express express-handlebars hoek stripe
npm install body-parser express express-handlebars hoek stripe
git commit -m "updated"
git push

0
  1. Trên GitHub, điều hướng đến trang chính của kho.
  2. Dưới tên kho lưu trữ của bạn, nhấp vào Bảo mật.
  3. Nhấp vào cảnh báo bạn muốn xem.
  4. Xem lại chi tiết về lỗ hổng bảo mật và nếu có, yêu cầu kéo có chứa bản sửa lỗi bảo mật tự động.
  5. Theo tùy chọn, nếu chưa có bản sửa lỗi bảo mật tự động cho cảnh báo, để tạo một yêu cầu kéo để giải quyết lỗ hổng, hãy nhấp vào Tạo bản sửa lỗi bảo mật tự động.
  6. Khi bạn đã sẵn sàng cập nhật phần phụ thuộc của mình và giải quyết lỗ hổng, hãy hợp nhất yêu cầu kéo.

Xem chi tiết


0

cố gắng npm audit fix, nó sẽ giải quyết nhiều cảnh báo

sau đó npm i [package.name]@xxx

ví dụ:

"dependencies": {
  "lodash": ">=4.17.13"
}

npm i lodash@4.17.13

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.