
NPM-Pakete sicher installieren
Ein sicherheitsorientierter npm-Installer, der Ihre Projekte vor kürzlich kompromittierten Paketen schützt.
Angriffe auf die Lieferkette von npm-Paketen sind eine wachsende Bedrohung. Angreifer kompromittieren manchmal legitime Pakete, indem sie:
Diese Angriffe passieren oft plötzlich – ein Paket, das gestern sicher war, könnte heute kompromittiert sein. safe-npm schützt Sie, indem es nur Paketversionen installiert, die seit einer Mindestdauer öffentlich verfügbar sind (standardmäßig 90 Tage). Das gibt der Sicherheitsgemeinschaft Zeit, bösartige Veröffentlichungen zu entdecken und zu melden, bevor sie Ihr Projekt erreichen.
Wenn Sie safe-npm install ausführen, geschieht Folgendes:
package.json oder über BefehlszeilenargumenteWenn Sie beispielsweise react@^18 angeben und ein bösartiges [email protected] gestern veröffentlicht wurde, installiert safe-npm stattdessen die neueste Version, die mindestens 90 Tage alt ist.
# Install globally
npm install -g @dendronhq/safe-npm
# Now you can use it anywhere
safe-npm install
# Clone and build
git clone <repository-url>
cd safe-npm
npm install
npm run build
# Link the binary globally
npm link
# Use the minimum age of 90 days (default)
safe-npm install
# Or specify your own minimum age
safe-npm install --min-age-days 120
# Install packages directly with version constraints
safe-npm install react@^18 lodash@^4.17.0
# These will be filtered to only use versions at least 90 days old
safe-npm install express --min-age-days 60
# Preview which versions would be installed without actually installing
safe-npm install --dry-run
--min-age-days <n>Standard: 90
Die Mindestanzahl an Tagen, die eine Paketversion veröffentlicht sein muss, bevor sie installiert werden kann.
Beispiel: --min-age-days 120 erfordert, dass Pakete mindestens 4 Monate alt sind.
Wann Sie den Wert anpassen sollten:
--ignore <pkg1,pkg2>Eine durch Kommas getrennte Liste von Paketen, die die Altersanforderung umgehen. Diese Pakete respektieren weiterhin Semver-Bereiche, ignorieren jedoch das Mindestalter.
Beispiel: --ignore typescript,@types/node
Wann Sie das verwenden sollten:
--strictBeendet mit einem Fehler, wenn IRGENDEINE Abhängigkeit nicht auf eine Version aufgelöst werden kann, die die Altersanforderung erfüllt.
Beispiel: safe-npm install --strict
Wann Sie das verwenden sollten:
--dev / --prod-onlySteuert, welche Abhängigkeiten aus package.json verarbeitet werden.
Beispiele:
safe-npm install --dev - Nur devDependencies installierensafe-npm install --prod-only - Nur Produktionsabhängigkeiten installierenWann Sie das verwenden sollten:
--strategy <direct|overrides>Standard: direct
Wie safe-npm die aufgelösten Versionen installiert:
direct - Installiert die aufgelösten Versionen direkt mit npm install package@version
overrides - Schreibt aufgelöste Versionen in das overrides-Feld von package.json und führt dann npm install aus
--registry <url>Standard: https://registry.npmjs.org
Gibt eine alternative npm-Registry an.
Beispiel: --registry https://registry.company.com
Wann Sie das verwenden sollten:
--dry-runZeigt an, was installiert würde, ohne Änderungen vorzunehmen.
Beispiel: safe-npm install --dry-run
Wann Sie das verwenden sollten:
# Create a new project
mkdir my-project && cd my-project
npm init -y
# Install dependencies safely
safe-npm install express@^4 lodash
# This creates package-lock.json with versions at least 90 days old
# Check what versions would be installed with age requirements
safe-npm install --dry-run
# If you're happy, install them
safe-npm install
# In your CI pipeline, fail the build if any package can't meet age requirements
safe-npm install --strict --min-age-days 120
# Or allow newer packages for dev dependencies only
safe-npm install --prod-only --strict
# Need to urgently update a specific package? Add it to ignore list
safe-npm install --ignore package-with-critical-fix
Das Projekt enthält eine Testsuite, die Sie ausführen können:
npm test
Für automatisierte Tests können Sie Registry-Antworten mithilfe von Fixtures simulieren:
export SAFE_NPM_FIXTURES=/path/to/fixtures.json
safe-npm install
Die Fixtures-Datei sollte JSON enthalten, das die npm-Registry-Antworten für jedes Paket widerspiegelt.
Szenario aus der Praxis:
popular-lib wird von einem vertrauenswürdigen Entwickler gepflegt[email protected] mit Malware^5.0.0 verwenden, würden sofort die bösartige Version installieren4.9.0 verwenden (die neueste Version von vor über 90 Tagen)Sicherheit bedeutet Kompromisse. safe-npm tauscht hochmoderne Updates gegen Schutz vor plötzlichen Kompromittierungen der Lieferkette. Es ist eine Ebene in einer Defense-in-Depth-Strategie, die auch Folgendes umfassen sollte:
npm audit)ISC