Proteggi le tue dipendenze dagli attacchi alla supply chain. **Singolo binario statico, zero dipendenze da crate Rust.**
Di **[[arnica](https://arnica.io?utm_source=depsguard&utm_medium=referral&utm_campaign=community)]**
## Indice
- [Panoramica](#overview)
- [Installazione](#install)
- [Utilizzo](#usage)
- [Cosa viene controllato](#what-gets-checked)
- [Posizioni dei file di configurazione](#config-file-locations)
- [Correzione di sicurezza urgente](#urgent-security-fix)
- [Backup e ripristino](#backups-and-restore)
- [Come funziona](#how-it-works)
- [Risoluzione dei problemi](#troubleshooting)
- [Aiuto e feedback](#help--feedback)
- [Guide](#guides)
- [Vedi anche](#see-also)
- [Licenza](#license)
## Panoramica
DepsGuard cerca **npm**, **pnpm**, **yarn**, **bun**, **uv**, **pip**, **poetry** e **aube** sulla tua macchina, legge i loro file di configurazione, li confronta con le impostazioni di supply chain consigliate e può **applicare le correzioni in modo interattivo**. Scansiona anche le configurazioni di **Renovate** e **Dependabot** nei tuoi repository. Non esegue mai installazioni di pacchetti; modifica solo i file di configurazione che approvi e scrive **backup** prima di qualsiasi modifica.
### Funzionalità principali
- TUI interattiva: scansione, revisione, attivazione/disattivazione delle correzioni, applicazione
- Sottocomando `scan` per report in sola lettura
- Sottocomando `restore` per scegliere un backup ed eseguire il rollback di un file
- Multipiattaforma: Linux, macOS, Windows
- Nessuna crate Rust di terze parti inclusa (stdlib + piccola quantità di FFI di piattaforma per il terminale)
### Stack tecnologico
| Area | Dettagli |
|------|---------|
| Linguaggio | Rust (MSRV **1.74**, vedi `Cargo.toml`) |
| CLI / TUI | `src/main.rs`, `src/ui.rs`, `src/term.rs` |
| Logica di configurazione | `src/manager.rs`, `src/fix.rs` |
| Sito web | Sito statico in `docs/` (separato dal binario) |
## Installazione
### Binari precompilati
Ogni [Release GitHub](https://github.com/arnica/depsguard/releases) include archivi per:
- Linux: `x86_64` (glibc), `x86_64` (musl), `aarch64` (glibc)
- macOS: Intel e Apple Silicon
- Windows: ZIP `x86_64` contenente `depsguard.exe`
Scarica l'archivio per la tua piattaforma, estrailo e metti il binario nel tuo `PATH`.
Verifica l'integrità usando il file `.sha256` corrispondente accanto a ogni asset nella pagina di release.
### Installazione per piattaforma
#### Linux (Debian/Ubuntu via APT)```bash
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://depsguard.com/apt/gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/depsguard.gpg
echo "deb [arch=amd64,arm64 signed-by=/etc/apt/keyrings/depsguard.gpg] https://depsguard.com/apt stable main" | sudo tee /etc/apt/sources.list.d/depsguard.list >/dev/null
sudo apt update
sudo apt install depsguard
macOS / Linux (Homebrew)```bash
Homebrew
brew install depsguard
root@kitploit:~
DepsGuard è in [homebrew-core](https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/d/depsguard.rb), quindi non è richiesto un tap personalizzato.
> **Stai migrando dal vecchio tap `arnica/depsguard`?** Passa alla formula core una volta:
>
> ```bash
> brew uninstall depsguard
> brew untap arnica/depsguard
> brew update
> brew install depsguard
> ```
#### Windows```powershell
# WinGet
winget install Arnica.DepsGuard
# Scoop
scoop bucket add depsguard https://github.com/arnica/depsguard
scoop install depsguard
Gestori di pacchetti (quando pubblicati dal tuo fornitore)
Se la tua organizzazione distribuisce DepsGuard tramite Homebrew, Scoop o WinGet, segui le loro istruzioni. La configurazione o l'automazione di questi canali (PR per Homebrew core, bucket, PR per WinGet, segreti CI) è documentazione per i manutentori; consulta AGENTS.md nella sezione Release & distribution.
App store / gestori di pacchetti
Canale
Linux
macOS
Windows
Comando di installazione
APT (repo personalizzata)
sì
no
no
sudo apt install depsguard (dopo la configurazione del repo sopra)
Il binario è `target/release/depsguard` (`.exe` su Windows). Rust **1.74+** è richiesto.
## Utilizzo```bash
depsguard # interactive: scan, choose fixes, apply
depsguard scan # report only; no writes (exits 1 if action is needed)
depsguard --no-search # skip recursive file search, check local configs only
depsguard restore # restore from a previous backup
depsguard --help # CLI help
Eseguidepsguard per avviare la TUI interattiva. Esegue una scansione del sistema e mostra una tabella dei risultati. Premi un tasto qualsiasi per passare al selettore delle correzioni. L'individuazione delle configurazioni a livello di repository parte dalla directory corrente e cerca verso il basso. Usa depsguard scan per un report in sola lettura, oppure depsguard --no-search per saltare la ricerca ricorsiva dei file e controllare solo le configurazioni a livello utente.
Nota: alcune impostazioni richiedono una versione minima. Se la tua versione è troppo vecchia vedrai:
ℹ min-release-age – requires npm ≥ 11.10 (have 10.2.0).
Aggiorna con npm install -g npm@latest e riesegui.
Naviga e seleziona – usa ↑↓ per spostarti nell'elenco (^u^d per pagina). Premi Spazio per attivare o disattivare una correzione. Usa i tasti di filtro rapido per selezionare in blocco per file: a tutti, n .npmrc, u uv.toml, ecc. – premili una volta per selezionare, di nuovo per deselezionare, una terza volta per cancellare il filtro. Premi f per mostrare solo le correzioni attualmente selezionate.
Anteprima – premi d per vedere un diff di ciò che cambierà prima di applicare qualsiasi modifica.
Applica – premi Invio per applicare le correzioni selezionate. Viene creato un backup con timestamp prima di scrivere qualsiasi file.
Riscansiona – DepsGuard esegue automaticamente una nuova scansione dopo l'applicazione, così puoi verificare che tutto sia a posto.
Ripristina – esegui depsguard restore in qualsiasi momento per eseguire il rollback dall'elenco dei backup. Premi q o Esc per uscire.
Cosa viene controllato
Manager
Config
Impostazione
Valore
Perché
npm
~/.npmrc
min-release-age
7 (giorni)
Ritarda le versioni appena pubblicate (richiede npm >= 11.10)
npm/pnpm
~/.npmrc
ignore-scripts
true
Riduce il rischio degli script di installazione (npm lo rispetta in .npmrc; pnpm >= 11 lo legge da pnpm-workspace.yaml / config.yaml globale, non da .npmrc)
pnpm
~/.npmrc
minimum-release-age
10080 (minuti)
Ritarda le nuove versioni di 7 giorni (solo pnpm 10.16–10.x; pnpm >= 11 ignora .npmrc; usa pnpm-workspace.yaml)
pnpm
rc globale (pnpm <= 10)
minimum-release-age
10080 (minuti)
Ritarda le nuove versioni di 7 giorni (richiede pnpm >= 10.16)
pnpm
rc globale (pnpm <= 10)
block-exotic-subdeps
true
Blocca le dipendenze transitive non attendibili (richiede pnpm >= 10.26)
pnpm
rc globale (pnpm <= 10)
trust-policy
no-downgrade
Blocca i downgrade di provenienza (richiede pnpm >= 10.21)
pnpm
rc globale (pnpm <= 10)
strict-dep-builds
true
Va in errore con script di build non revisionati (richiede pnpm >= 10.3)
pnpm
rc globale (pnpm <= 10)
ignore-scripts
true
Blocca script di installazione dannosi
pnpm
config.yaml globale (pnpm >= 11)
minimumReleaseAge
Posizioni dei file di configurazione
Manager
Linux
macOS
Windows
npm/pnpm/aube
~/.npmrc
~/.npmrc
%USERPROFILE%\.npmrc
pnpm globale (pnpm <= 10)
$XDG_CONFIG_HOME/pnpm/rc o ~/.config/pnpm/rc
$XDG_CONFIG_HOME/pnpm/rc o ~/Library/Preferences/pnpm/rc
%LOCALAPPDATA%\pnpm\config\rc
pnpm globale (pnpm >= 11)
$XDG_CONFIG_HOME/pnpm/config.yaml o ~/.config/pnpm/config.yaml
$XDG_CONFIG_HOME/pnpm/config.yaml o ~/Library/Preferences/pnpm/config.yaml
%LOCALAPPDATA%\pnpm\config\config.yaml
yarn
~/.yarnrc.yml
~/.yarnrc.yml
%USERPROFILE%\.yarnrc.yml
pnpm
pnpm-workspace.yaml
pnpm-workspace.yaml
pnpm-workspace.yaml
bun
$XDG_CONFIG_HOME/.bunfig.toml o ~/.bunfig.toml
$XDG_CONFIG_HOME/.bunfig.toml o ~/.bunfig.toml
%USERPROFILE%\.bunfig.toml
uv
$XDG_CONFIG_HOME/uv/uv.toml o ~/.config/uv/uv.toml
$XDG_CONFIG_HOME/uv/uv.toml o ~/.config/uv/uv.toml
%APPDATA%\uv\uv.toml
pip
$XDG_CONFIG_HOME/pip/pip.conf o ~/.config/pip/pip.conf
~/Library/Application Support/pip/pip.conf o ~/.config/pip/pip.conf (o $XDG_CONFIG_HOME/pip/pip.conf se impostata)
%APPDATA%\pip\pip.ini
poetry
$XDG_CONFIG_HOME/pypoetry/config.toml o ~/.config/pypoetry/config.toml
I file di configurazione a livello utente vengono letti dalle loro posizioni standard (incluse le path basate su XDG dove lo strumento le supporta). Le configurazioni a livello di repository vengono individuate cercando verso il basso dalla directory corrente, saltando le directory note di grandi dimensioni (node_modules, .git, target, Library, .cache e altre) per mantenere veloci le scansioni. Vengono cercate tutte le configurazioni a livello di repository: .npmrc, .yarnrc.yml, pnpm-workspace.yaml, le configurazioni di Renovate e quelle di Dependabot. Le impostazioni di pnpm possono trovarsi in ~/.npmrc (solo pnpm <= 10; pnpm >= 11 legge da .npmrc solo le impostazioni di autenticazione/registro), nel file di configurazione globale di pnpm (rc su pnpm <= 10, config.yaml su pnpm >= 11), oppure in pnpm-workspace.yaml; DepsGuard controlla tutte e tre le posizioni in modo indipendente. Per pip, uv e poetry, DepsGuard individua l'unico file di configurazione utente effettivo e segnala solo quel file, invece di evidenziare separatamente i file sovrascritti. pip e poetry uniscono i loro file di configurazione in base alla precedenza (vince il file con precedenza più alta che imposta il cooldown, oppure la posizione preferita se nessuno lo fa); uv legge un singolo file utente ($XDG_CONFIG_HOME/uv/uv.toml quando XDG_CONFIG_HOME è impostata, altrimenti ~/.config/uv/uv.toml) invece di unire entrambi. Per bun, se esistono più file di configurazione a livello utente (ad esempio sia una path XDG che una path nella home directory), DepsGuard esegue la scansione di ciascun file esistente separatamente. aube legge lo stesso ~/.npmrc di npm/pnpm (minimumReleaseAge, in minuti) e viene controllato anche sui file .npmrc a livello di repository individuati; pip e poetry vengono scansionati nella loro configurazione utente (pip.conf / pypoetry/config.toml).
Correzione di sicurezza urgente
Se la versione corretta è più recente della tua finestra di cooldown, aggiungi un'eccezione limitata, installa la correzione e poi rimuovi l'eccezione.
Preferisci un'eccezione specifica per il pacchetto rispetto all'abbassamento del cooldown globale. In questo modo il ritardo resta attivo per tutte le altre dipendenze.
Manager
Come bypassare il cooldown
npm
npm install <pkg>@<ver> --min-release-age=0
pnpm
Aggiungi una voce a minimumReleaseAgeExclude in pnpm-workspace.yaml, esegui pnpm add <pkg>@<ver>, quindi rimuovi la voce. L'esclusione per nome del pacchetto funziona su pnpm 10.16+; il blocco a una versione specifica (<pkg>@<ver>) richiede inoltre pnpm 10.19+. pnpm non ha un override CLI documentato per minimumReleaseAge.
yarn
Aggiungi <pkg> (o un glob) a npmPreapprovedPackages in .yarnrc.yml, oppure esegui YARN_NPM_MINIMAL_AGE_GATE=0s yarn up <pkg>@<ver> per un singolo comando. npmPreapprovedPackages esenta le corrispondenze da tutti i gate dei pacchetti di Yarn, non solo dal gate sull'età.
bun
Aggiungi <pkg> a install.minimumReleaseAgeExcludes in un bunfig.toml a livello di repository o in ~/.bunfig.toml a livello utente, oppure esegui bun add <pkg>@<ver> --minimum-release-age 0.
aube
Aggiungi <pkg> a minimumReleaseAgeExclude in .npmrc, oppure imposta AUBE_MINIMUM_RELEASE_AGE=0 (o npm_config_minimum_release_age=0) per una singola installazione.
uv
Aggiungi "<pkg>" = false a exclude-newer-package in uv.toml o pyproject.toml, esegui uv add <pkg>==<ver>, quindi rimuovi la voce. exclude-newer-package è un override separato per pacchetto del limite globale exclude-newer. La CLI di uv accetta --exclude-newer-package PACKAGE=DATE ma non PACKAGE=false.
pip
Esegui pip install <pkg>==<ver> --uploaded-prior-to=P0D per una singola installazione. P0D disabilita il cooldown solo per quel comando; pip non ha esclusioni per pacchetto nella configurazione.
poetry
Aggiungi a (separato da virgole) in /, esegui , quindi rimuovi la voce. esenta invece tutti i pacchetti da un indice nominato.
Prima di bypassare il cooldown:
Controlla se la CVE riguarda effettivamente il tuo utilizzo.
Controlla se è già disponibile una versione precedente nota come sicura. Un downgrade potrebbe essere più sicuro.
Rimuovi le eccezioni temporanee dopo l'aggiornamento.
Backup e ripristino
Prima di modificare un file, DepsGuard scrive un backup in ~/.depsguard/backups/.
Esegui depsguard restore per elencare i backup e ripristinarne uno.
- **Zero crate di terze parti**: scelta intenzionale per un piccolo strumento affine alla sicurezza; consulta `AGENTS.md` se modifichi questa policy.
- **Colori**: usano sequenze ANSI; i terminali moderni su Windows (ad es. Windows Terminal) sono supportati.
## Risoluzione dei problemi
| Sintomo | Cosa provare |
|---------|-------------|
| `depsguard: command not found` | Assicurati che la directory di installazione sia nel `PATH`, oppure usa il percorso completo del binario. |
| Errori di permesso durante la scrittura della configurazione | DepsGuard modifica solo file nel tuo profilo utente; esegui come utente normale, non elevato, a meno che quei file non siano di proprietà dell'amministratore. |
| Tasti che non funzionano su Windows | Usa **Windows Terminal** o un altro terminale compatibile con VT; il vecchio `cmd.exe` potrebbe non gestire tutti i tasti. |
| workspace pnpm mancanti | Assicurati che `pnpm-workspace.yaml` si trovi all'interno dell'albero della tua home directory; layout molto insoliti potrebbero non essere individuati. |
| `cargo install` non funziona | Installa Rust tramite [rustup](https://rustup.rs/) e usa Rust **≥ 1.74**. |
## Aiuto e feedback
- [Segnala un bug o richiedi una funzionalità](https://github.com/arnica/depsguard/issues)
- [Segnala una vulnerabilità di sicurezza](https://github.com/arnica/depsguard/security/advisories/new) (vedi [`SECURITY.md`](https://github.com/arnica/depsguard/blob/main/SECURITY.md))
- Il flusso di lavoro di sviluppo per i contributori è descritto in [`AGENTS.md`](https://github.com/arnica/depsguard/blob/main/AGENTS.md).
## Guide
Guide approfondite su [depsguard.com](https://depsguard.com) spiegano ogni impostazione di hardening e gli attacchi alla supply chain contro cui difendono:
- [Come proteggersi dagli attacchi alla supply chain di npm](https://depsguard.com/guide/) (la guida completa all'hardening)
- [Cooldown delle dipendenze (età minima di rilascio)](https://depsguard.com/cooldown/)
- [Bloccare gli script di installazione con ignore-scripts](https://depsguard.com/ignore-scripts/)
- [Bloccare le dipendenze transitive non affidabili (block-exotic-subdeps)](https://depsguard.com/block-exotic-subdeps/)
- [Interrompi in presenza di script di build non revisionati (strict-dep-builds)](https://depsguard.com/strict-dep-builds/)
- [Bloccare i downgrade di provenienza (trust-policy)](https://depsguard.com/trust-policy/)
- Resoconti degli incidenti: [axios](https://depsguard.com/axios-npm-attack/) · [Shai-Hulud](https://depsguard.com/shai-hulud/) · [TanStack](https://depsguard.com/tanstack-npm-attack/)
## Vedi anche
- [**Dependency Cooldowns** (`cooldowns.dev`)](https://cooldowns.dev/): una guida di riferimento e un helper shell complementare (`cooldowns.sh`) incentrato specificamente sui **cooldown per età minima di rilascio**. Completa DepsGuard: copre un insieme più ampio di ecosistemi sull'asse dei cooldown (pip, uv, npm, pnpm, Yarn, Bun, Deno, Cargo), mentre DepsGuard copre npm/pnpm/yarn/bun/aube/uv/pip/poetry oltre a Renovate/Dependabot e aggiunge altre impostazioni di hardening (`ignore-scripts`, `block-exotic-subdeps`, `trust-policy`, `strict-dep-builds`) con una TUI interattiva, anteprima delle differenze e backup/ripristino.
## Licenza
MIT
---
**Link:** [Repository](https://github.com/arnica/depsguard) · [Sito di documentazione](https://depsguard.com)
Ritarda le nuove versioni di 7 giorni (richiede yarn >= 4.10)
pnpm
pnpm-workspace.yaml
minimumReleaseAge
10080 (minuti)
Ritarda le nuove versioni di 7 giorni (richiede pnpm >= 10.16)
pnpm
pnpm-workspace.yaml
strictDepBuilds
true
Va in errore con script di build non revisionati (richiede pnpm >= 10.3)
pnpm
pnpm-workspace.yaml
trustPolicy
no-downgrade
Blocca i downgrade di provenienza (richiede pnpm >= 10.21)
pnpm
pnpm-workspace.yaml
blockExoticSubdeps
true
Blocca le dipendenze transitive non attendibili (richiede pnpm >= 10.26)
pnpm
pnpm-workspace.yaml
ignoreScripts
true
Blocca script di installazione dannosi (richiede pnpm >= 10.16)
bun
~/.bunfig.toml
install.minimumReleaseAge
604800 (secondi)
Ritardo di ~7 giorni (richiede bun >= 1.3)
aube
~/.npmrc
minimumReleaseAge
10080 (minuti)
Ritarda le nuove versioni di 7 giorni
uv
uv.toml
exclude-newer
7 days
Ritarda le nuove pubblicazioni (richiede uv >= 0.9.17)
pip
pip.conf ([install])
uploaded-prior-to
P7D (7 giorni)
Ritarda le nuove pubblicazioni (richiede pip >= 26.1)
poetry
config.toml ([solver])
min-release-age
7 (giorni)
Ritarda le nuove pubblicazioni (richiede poetry >= 2.4)
renovate
renovate.json ecc.
minimumReleaseAge
7 days
Ritarda le PR di aggiornamento delle dipendenze di 7 giorni
dependabot
.github/dependabot.yml
cooldown.default-days
7
Ritarda le PR di aggiornamento delle dipendenze di 7 giorni
$XDG_CONFIG_HOME/pypoetry/config.toml (se impostata) o ~/Library/Application Support/pypoetry/config.toml
%APPDATA%\pypoetry\config.toml
renovate
renovate.json, .renovaterc, .github/renovate.json, ecc.
(stessi)
(stessi)
dependabot
.github/dependabot.yml
(stessi)
(stessi)
<pkg>
solver.min-release-age-exclude
poetry.toml
config.toml
poetry add <pkg>@<ver>
solver.min-release-age-exclude-source
Renovate
Gli aggiornamenti di sicurezza bypassano già minimumReleaseAge. Per un aggiornamento di versione, aggiungi una voce packageRules con matchPackageNames: ["<pkg>"] e minimumReleaseAge: null.
Dependabot
Gli aggiornamenti di sicurezza bypassano già cooldown. Per un aggiornamento di versione, aggiungi <pkg> a cooldown.exclude.