
Installa pacchetti NPM in sicurezza
Un installer npm incentrato sulla sicurezza che protegge i tuoi progetti da pacchetti recentemente compromessi.
Gli attacchi alla supply chain sui pacchetti npm sono una minaccia crescente. Gli attaccanti a volte compromettono pacchetti legittimi:
Questi attacchi avvengono spesso all'improvviso: un pacchetto che era sicuro ieri potrebbe essere compromesso oggi. safe-npm ti protegge installando solo versioni di pacchetti disponibili pubblicamente da un periodo minimo di tempo (90 giorni di default). Questo dà alla community di sicurezza il tempo di scoprire e segnalare release dannose prima che raggiungano il tuo progetto.
Quando esegui safe-npm install, questo:
package.json o dagli argomenti della riga di comandoAd esempio, se specifichi react@^18 e un [email protected] dannoso è stato pubblicato ieri, safe-npm installerà l'ultima versione che ha almeno 90 giorni.
# 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>Valore predefinito: 90
Il numero minimo di giorni che una versione di un pacchetto deve essere stata pubblicata prima di poter essere installata.
Esempio: --min-age-days 120 richiede che i pacchetti abbiano almeno 4 mesi.
Quando regolarlo:
--ignore <pkg1,pkg2>Un elenco separato da virgole di pacchetti che bypassano il requisito di età. Questi pacchetti rispetteranno comunque gli intervalli semver ma ignoreranno l'età minima.
Esempio: --ignore typescript,@types/node
Quando usarlo:
--strictEsce con un errore se UNA QUALSIASI dipendenza non può essere risolta a una versione che soddisfa il requisito di età.
Esempio: safe-npm install --strict
Quando usarlo:
--dev / --prod-onlyControlla quali dipendenze da package.json vengono elaborate.
Esempi:
safe-npm install --dev - Installa solo le devDependenciessafe-npm install --prod-only - Installa solo le dipendenze di produzioneQuando usarlo:
--strategy <direct|overrides>Valore predefinito: direct
Come safe-npm installa le versioni risolte:
direct - Installa direttamente le versioni risolte usando npm install package@version
overrides - Scrive le versioni risolte nel campo overrides di package.json, poi esegue npm install
--registry <url>Valore predefinito: https://registry.npmjs.org
Specifica un registro npm alternativo.
Esempio: --registry https://registry.company.com
Quando usarlo:
--dry-runMostra cosa verrebbe installato senza apportare modifiche.
Esempio: safe-npm install --dry-run
Quando usarlo:
# 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
Il progetto include una suite di test che puoi eseguire:
npm test
Per i test automatici, puoi simulare le risposte del registro usando fixture:
export SAFE_NPM_FIXTURES=/path/to/fixtures.json
safe-npm install
Il file delle fixture dovrebbe contenere JSON che rispecchia le risposte del registro npm per ciascun pacchetto.
Scenario reale:
popular-lib è mantenuto da uno sviluppatore fidato[email protected] con malware^5.0.0 installerebbero immediatamente la versione dannosa4.9.0 (l'ultima versione di 90+ giorni fa)La sicurezza è fatta di compromessi. safe-npm scambia aggiornamenti all'avanguardia con protezione contro compromissioni improvvise della supply chain. È uno strato in una strategia di difesa in profondità che dovrebbe includere anche:
npm audit)ISC