Tutte le guide
Gravità CriticoConfigurazioni errate

Backup del database esposti: cosa succede quando /backup.sql è raggiungibile

I backup del database — file .sql, dump compressi, archivi zip del database — vengono talvolta creati direttamente in una directory accessibile dal web e lasciati lì. Una sola richiesta riuscita a /backup.sql o /dump.sql consegna a un attaccante ogni riga di ogni tabella senza toccare la logica della tua applicazione.

Che cos'è

Script di backup, pannelli di controllo dell'hosting e strumenti di esportazione manuale scrivono spesso file di dump con nomi prevedibili: backup.sql, dump.sql, database.sql, db.sql.gz, backup.zip. Quando finiscono nella web root e il server non li blocca esplicitamente, diventano normali file scaricabili. Gli attaccanti eseguono scansioni automatiche che richiedono decine di questi nomi comuni su ogni host raggiungibile.

AppSafe controlla i percorsi più comuni — /backup.sql, /dump.sql, /database.sql, /db.sql.gz e altri — e segnala quelli che restituiscono una risposta 200 con contenuto simile a un dump SQL o a un archivio. Il controllo rileva sia SQL in chiaro sia formati compressi.

Perché è importante

Un dump SQL contiene ogni riga di ogni tabella al momento della creazione: account utente, hash delle password, indirizzi email, dati personali, token di sessione, cronologia dei pagamenti e stato interno dell'applicazione. Scaricare un dump richiede una sola richiesta HTTP che non lascia traccia nei log dell'applicazione — il web server lo serve come qualsiasi file statico.

A differenza di una API key trapelata, un database trapelato non si può ruotare. Una volta che qualcuno ha una copia della tua tabella utenti, la violazione è permanente per quegli utenti. A seconda del contenuto del dump, potresti dover effettuare notifiche di violazione obbligatorie ai sensi di GDPR, CCPA o HIPAA, oltre al costo operativo di avvisare ogni utente coinvolto.

Come risolverlo

Spostare i backup fuori dalla web root

La soluzione corretta è scrivere i file di backup in una directory che il web server non può raggiungere — un percorso come /var/backups/ o un bucket di object storage con ACL private, non una sottodirectory di /var/www/. Rivedi cron job e script di backup e aggiorna il percorso di destinazione.

Bloccare le estensioni di backup comuni in nginx

Come misura di difesa in profondità, nega a livello di server le richieste di file SQL e delle estensioni di archivio comuni, indipendentemente da dove siano archiviati i file.

location ~* \.(sql|sql\.gz|bak|dump|tar|tar\.gz|tar\.bz2|zip)$ {
  deny all;
  return 404;
}
Eliminare i file di dump già presenti nella web root

Se trovi un file esposto, eliminalo subito. Poi verifica come è finito lì — correggi lo script o il processo che l'ha creato, così non ricompare alla prossima esecuzione pianificata.

Verificare che i percorsi restituiscano 404

Dopo la pulizia, conferma che i percorsi comuni siano bloccati.

for path in /backup.sql /dump.sql /database.sql /db.sql.gz; do
  code=$(curl -so /dev/null -w "%{http_code}" "https://yourdomain.com$path")
  echo "$path → $code"
done
# Every line must print 404

FAQ

Come farebbe un attaccante a sapere di provare /backup.sql sul mio sito?

Non ti prende di mira in modo specifico. Gli scanner automatici richiedono di continuo decine di nomi di backup comuni su milioni di host. Un file esistente restituisce 200 e viene scaricato prima ancora che tu sappia di doverlo cercare.

Il file è rimasto lì solo un'ora. Il danno è fatto?

Forse. Le scansioni automatiche girano 24 ore su 24 e i file vengono spesso trovati pochi minuti dopo la loro comparsa. Se hai i log di accesso, controlla se il percorso è stato richiesto — in caso affermativo, trattalo come una violazione confermata.

Posso proteggere il file con una password invece di spostarlo?

La basic auth su un singolo file è fragile e facile da configurare male. La risposta giusta è rimuovere completamente il file da qualsiasi posizione accessibile via web. I backup devono stare in un luogo che il server HTTP non può raggiungere.

La tua app è interessata?

AppSafe controlla questo e decine di altri problemi in un'unica scansione gratuita.

Scansiona la mia app gratis