關於安全性稽核

安全性稽核是針對套件依賴項進行安全性漏洞評估。安全性稽核可協助您找出並修正依賴項中已知的漏洞,這些漏洞可能會造成資料遺失、服務中斷、未經授權存取敏感資訊或其他問題,進而保護套件使用者。

使用 npm audit 執行安全性稽核

注意: npm audit 指令在 npm@6 中提供。若要升級,請執行 npm install npm@latest -g

npm audit 指令會將套件中設定的依賴項說明提交至您的預設登錄,並要求提供已知漏洞報告。 npm audit 會檢查直接依賴項、devDependencies、bundledDependencies 和 optionalDependencies,但不會檢查 peerDependencies。

當您使用 npm install 安裝套件時,npm audit 會自動執行。您也可以手動對 已在本機安裝的套件 執行 npm audit,以執行套件安全性稽核並產生依賴項漏洞報告,並在有提供的情況下建議修正程式。

  1. 在命令列中,輸入 cd path/to/your-package-name 並按下 Enter,導航至您的套件目錄。
  2. 確保您的套件包含 package.jsonpackage-lock.json 檔案。
  3. 輸入 npm audit 並按下 Enter
  4. 檢閱稽核報告,並執行建議的命令或進一步調查(如果需要)。

解決 EAUDITNOPJSONEAUDITNOLOCK 錯誤

npm audit 要求套件具有 package.jsonpackage-lock.json 檔案。

  • 如果您收到 EAUDITNOPJSON 錯誤,請按照「建立 package.json 檔案」中的步驟建立 package.json 檔案。
  • 如果您收到 EAUDITNOLOCK 錯誤,請確保您的套件具有 package.json 檔案,然後執行 npm i --package-lock-only 建立套件鎖定檔。

檢閱並處理安全性稽核報告

執行 npm audit 會產生一份安全性弱點報告,其中包含受影響的套件名稱、弱點嚴重性與說明、路徑和其他資訊,以及(如果有的話)套用修補程式以解決弱點的命令。如需報告中欄位的更多資訊,請參閱「關於稽核報告

發現安全性漏洞並建議更新

如果發現安全性弱點且有更新可用,您可以

  • 執行 npm audit fix 子命令,自動安裝相容的更新至有弱點的依賴項。
  • 個別執行建議的命令,以安裝更新至有弱點的依賴項。(某些更新可能是會中斷 semver 的變更;如需更多資訊,請參閱「SEMVER 警告」)
Screenshot of command-line audit results with suggested fixes

SEMVER 警告

如果建議的動作是潛在的重大變更(語意版本重大變更),將會接著顯示 SEMVER WARNING,內容為「SEMVER WARNING:建議的動作是潛在的重大變更」。如果具有漏洞的套件已變更其 API,您可能需要對套件的程式碼進行其他變更。

發現安全性漏洞,需要手動檢閱

如果發現安全性漏洞,但沒有可用的修補程式,稽核報告將提供有關漏洞的資訊,以便您可以進一步調查。

Screenshot of command-line audit results requiring a manual review

若要處理漏洞,您可以

檢查緩解因素

檢閱「更多資訊」欄位中的安全性公告,以取得緩解因素,讓您可以在有限的情況下繼續使用具有漏洞的套件。例如,漏洞可能只存在於程式碼在特定作業系統上使用時,或在呼叫特定函數時。

如果存在修正程式,請更新依賴套件

如果存在修正程式,但依賴具有漏洞套件的套件尚未更新為包含已修正版本,您可能想在依賴套件儲存庫中開啟拉取或合併請求,以使用已修正版本。

  1. 若要找出必須更新的套件,請查看「路徑」欄位以取得具有漏洞的套件位置,然後查看依賴它的套件。例如,如果漏洞的路徑為 @package-name > dependent-package > package-with-vulnerability,您將需要更新 dependent-package
  2. npm 公共註冊表 中,找到依賴套件並導覽至其儲存庫。有關尋找套件的更多資訊,請參閱「搜尋和選擇要下載的套件」。
  3. 在依賴套件儲存庫中,開啟拉取或合併請求,以將有漏洞套件的版本更新為具有修正程式的版本。
  4. 一旦拉取或合併請求合併,且套件已在 npm 公共註冊表 中更新,請使用 npm update 更新您的套件副本。

修正漏洞

如果沒有修正程式,您可能想在套件儲存庫中提出拉取或合併請求,建議變更以處理漏洞,並提供給套件維護者。

  1. 查看「路徑」欄位以取得漏洞位置。
  2. npm 公共註冊表 中,找到具有漏洞的套件。有關尋找套件的更多資訊,請參閱「搜尋和選擇要下載的套件」。
  3. 在套件存放庫中,開啟一個 pull 或合併請求,以修正套件存放庫。
  4. 一旦修正合併,且套件已在 npm 公共註冊表中更新,請更新您的套件副本,該副本依賴於已修正的套件。

在套件或依賴套件問題追蹤器中開啟問題

如果您不希望自行修正漏洞或更新依賴套件,請在套件或依賴套件的議題追蹤器中開啟一個議題。

  1. npm 公共註冊表 中,找出具有漏洞的套件或需要更新的依賴套件。如需有關尋找套件的更多資訊,請參閱「搜尋並選擇要下載的套件」。
  2. 在套件或依賴套件的議題追蹤器中,開啟一個議題,並包含稽核報告中的資訊,包括「更多資訊」欄位的漏洞報告。

未發現安全性漏洞

如果未發現任何安全性漏洞,表示在您的套件依賴樹中未發現具有已知漏洞的套件。由於建議資料庫隨時更新,我們建議定期手動執行 npm audit,或將 npm audit 加入您的持續整合流程。

Screenshot showing audit report with no vulnerabilities

在套件安裝時關閉 npm audit

安裝單一套件

若要在安裝單一套件時關閉 npm audit,請使用 --no-audit 旗標

npm install example-package-name --no-audit

如需更多資訊,請參閱 npm-install 命令

安裝所有套件

若要在安裝所有套件時關閉 npm audit,請在您的使用者和全域 npmrc 設定檔中將 audit 設定設為 false

npm set audit false

如需更多資訊,請參閱 npm-config 管理命令npm-config audit 設定