Závislosti
npm audit
npm audit porovná balíčky ve vašem projektu se známými bezpečnostními upozorněními a nahlásí, co najde. Je součástí npm, nic nestojí a trvá pár sekund, takže je to nejsnazší SCA sken, jaký můžete spustit. Když víte, co čte, víte i to, co může přehlédnout.
Aktualizováno
Jak npm audit funguje
npm audit odešle popis závislostí vašeho projektu do výchozího registru a zeptá se na známé
zranitelnosti. Potřebuje package-lock.json nebo soubor shrinkwrap, protože podle něj ví, jaké verze
máte. Podrobnosti najdete v dokumentaci npm.
npm audit # report everything
npm audit --omit=dev # skip dev dependencies
npm audit --audit-level=high # fail only on high or critical
npm audit --json # machine-readable output
Jak číst výstup
- Závažnost pochází z bezpečnostního upozornění. Říká, jak vážná je chyba obecně, ne jak vážná je pro vás.
- Cesta závislostí ukazuje, co balíček přitáhlo. Většina nálezů jsou tranzitivní závislosti a oprava obvykle leží v balíčku o úroveň výš.
- Vývojová, nebo produkční. Chyba v testovacím nástroji se k uživatelům nedostane, ale stále běží ve vašem buildu, takže ji úplně neignorujte.
Pokud dostanete dlouhý seznam, začněte tím, co je zneužívané a co se dodává. Viz jak prioritizovat zranitelnosti.
npm audit fix a kdy ho nevynucovat
| Příkaz | Co dělá | Riziko |
|---|---|---|
npm audit fix |
Použije kompatibilní aktualizace v rámci vašich rozsahů verzí | Nízké. Přesto spusťte testy, protože provádí úplnou instalaci |
npm audit fix --force |
Povolí i změny mimo vaše rozsahy, včetně hlavních verzí | Vysoké. Může rozbít vaši aplikaci a npm říká, že ho bez jasné představy o tom, co chcete, nemáte používat |
Pokud oprava není k dispozici, můžete aktualizovat nadřazený balíček nebo pomocí pole overrides v
package.json vynutit opravenou tranzitivní verzi. Otestujte to, protože nadřazený balíček nebyl proti
této verzi sestaven.
Spouštění npm audit v CI
Ve výchozím nastavení npm audit skončí nenulovým kódem, jakmile cokoli najde, takže job selže při
každém upozornění s nízkou závažností. Týmy obvykle nastavují práh. Pozor: --audit-level mění jen práh
selhání a výstup nefiltruje.
- run: npm ci
- run: npm audit --omit=dev --audit-level=high
Taková kontrola může shodit build i bez jakékoli změny kódu, protože přes noc vyšlo nové upozornění. Než ji zapnete, rozhodněte, kdo takové selhání řeší. Více v článku kde spouštět SCA skeny.
Co npm audit přehlíží
-
Vše mimo npm. Vaše základní image, balíčky operačního systému, nástroje v Pythonu a GitHub Actions
v
package-lock.jsonnejsou. - Kód stažený během instalace. Instalační skripty mohou stahovat soubory, které žádný lockfile nezaznamená. Viz co lockfile nezaznamenává.
- Nové škodlivé balíčky. Porovnává se zveřejněnými upozorněními, takže balíček, ke kterému zatím žádné upozornění není, projde bez nálezu.
- Co už bylo vydáno. Hlásí stav projektu, který má právě před sebou. Nové upozornění pro loňské vydání se objeví, jen pokud ho někdo na té verzi spustí znovu.
- Zda jste dotčeni. Neví, jestli váš kód zranitelnou funkci používá. To řeší analýza dosažitelnosti.
npm audit signatures je samostatný příkaz, který ověřuje podpisy registru a atestace původu
(provenance) nainstalovaných balíčků. Kontroluje, odkud balíček pochází, ne zda je bezpečný.
npm audit a CRACI
Dál spouštějte npm audit na pull requestech. Je zdarma a známé problémy zachytí brzy. CRACI pokrývá to,
co on nevidí: jako váš runner pro GitHub Actions zaznamená každý balíček, který každý job skutečně stáhl z npm i ze
všech ostatních zdrojů, včetně balíčků obnovených z cache CI a souborů stažených instalačními hooky. Poté dál
kontroluje SBOM toho, co bylo vydáno, jak vycházejí nové zranitelnosti. Viz
nejlepší nástroje SCA nebo
generování SBOM během buildu.
npm audit: časté dotazy
Co dělá npm audit?
Odešle popis vašich závislostí do registru npm, porovná je se známými bezpečnostními upozorněními a nahlásí všechny zranitelné balíčky, včetně jejich závažnosti a toho, jak se do projektu dostaly.
Je npm audit fix bezpečný?
Samotný npm audit fix je obvykle bezpečný, protože zůstává v rámci vašich rozsahů verzí, ale poté spusťte testy. npm audit fix --force může nainstalovat nové hlavní verze a rozbít vaši aplikaci.
Proč npm audit ukazuje tolik zranitelností?
Většina pochází z tranzitivních závislostí a vývojových nástrojů. Použijte --omit=dev, abyste se soustředili na to, co se dodává, a prioritizujte podle zneužívání a expozice, ne podle počtu.
Jak v npm audit ignorovat zranitelnost?
npm audit nemá vestavěný seznam výjimek. Týmy používají pole overrides ke změně verze, práh pomocí --audit-level nebo obalový nástroj, který zaznamenává přijaté nálezy.
Potřebuje npm audit lockfile?
Ano, ve výchozím nastavení potřebuje package-lock.json nebo soubor shrinkwrap. Obejít to lze pomocí --no-package-lock, výsledky se ale pak mohou mezi spuštěními lišit.
Odhalí npm audit malware?
Jen jakmile k balíčku vyjde bezpečnostní upozornění. Nový škodlivý balíček žádné upozornění nemá, takže v den, kdy se objeví, nahlášen nebude.
Podívejte se, co npm audit nevidí
Spusťte jeden workflow GitHub Actions na CRACI a porovnejte jeho zaznamenanou SBOM se svým package-lock.json.
Rezervujte si demo