File .env esposto — la risposta all'incidente in 30 minuti | Scanthra

Scanthra · 6 min di lettura · Aggiornato Maggio 2026

Maggio 2026
TL;DR: Se https://tuosito.com/.env restituisce le tue chiavi API, la password del database e le credenziali SMTP, trattalo come una compromissione attiva anche se nessuno le ha ancora usate. Ruota tutto, verifica l'utilizzo, poi blocca il percorso. Prevedi 30 minuti di lavoro concentrato e qualche giorno di follow-up.

Perché un file .env esposto è grave

Un file .env di solito contiene:

Scanner internet come Shodan, BinaryEdge e decine di botnet che raccolgono credenziali interrogano continuamente /.env su milioni di host. Se il tuo è pubblico, dai per scontato che sia stato letto. Il costo della rotazione è molto più basso del costo di una violazione.

Passo 1 — Ruota ogni segreto nel file

Apri il file (o il tuo backup) e per ogni voce:

Usa un password manager o il tuo secrets manager (AWS Secrets Manager, Doppler, 1Password, Bitwarden) per generare i nuovi valori. Non riutilizzare mai nessuno dei vecchi segreti.

Passo 2 — Verifica l'utilizzo delle chiavi trapelate

Prima di dimenticare le vecchie chiavi, controlla se qualcuno le ha usate mentre erano esposte:

Se trovi qualcosa di sospetto: si tratta di un incidente confermato — escalate, registra tutto, segui il tuo piano di risposta agli incidenti, notifica i clienti se sono coinvolti dati personali. Per le entità in scope NIS2 (direttiva UE sulla cybersecurity), è obbligatorio inviare un'allerta precoce entro 24 ore.

Passo 3 — Blocca il percorso definitivamente

Il file esposto probabilmente si trovava nella root dell'applicazione perché la webroot del framework era di un livello troppo alto. Due livelli di difesa sono meglio di uno:

Sposta il file fuori dalla webroot:

mkdir /etc/myapp
mv /var/www/myapp/.env /etc/myapp/.env
chmod 600 /etc/myapp/.env
chown www-data:www-data /etc/myapp/.env

Aggiorna la tua app per leggere dal nuovo percorso.

E blocca i dotfile sul web server:

# nginx
location ~ /\.(?!well-known) { deny all; return 404; }
# Apache
<FilesMatch "^\.">
  Require all denied
</FilesMatch>

Passo 4 — Assicurati che non accada mai più

E la cronologia di Git?

Se .env è mai stato committato in un repository pubblico — anche brevemente, anche anni fa — dai per scontato che i segreti siano trapelati. La ricerca di GitHub e migliaia di sistemi di raccolta dati lo hanno già. git filter-repo riscrive la cronologia, ma devi comunque ruotare i valori, perché esistono copie fuori dal tuo controllo.

La lezione noiosa

Il file .env esposto è uno dei problemi rilevati più comuni da Scanthra in progetti PHP, Laravel, Django, Rails e Node. La causa principale è quasi sempre "Ho seguito un tutorial che metteva .env nella root del progetto e ho dimenticato che il web server serve file statici da lì." Spostare il file di una directory in su — e aggiungere la regola di blocco dei dotfile — chiude l'intera classe di problemi.

Come Scanthra rileva questo problema

Il nostro modulo Hidden Files controlla una whitelist curata di percorsi inclusi .env, .env.local, .env.production, .git/config, /backup.sql, /dump.sql, /wp-config.php.bak e altri. Seguiamo questo con controlli magic-byte (ZIP, gzip, header SQLite) così possiamo distinguere un vero backup da una pagina 404 che per caso restituisce 200.

Vuoi sapere se il tuo sito ha questo problema?

Scanthra esegue un controllo passivo e discreto, e ti invia un report PDF in linguaggio semplice.

Analizza il tuo sito gratis