Archives zip, .sql et backups laissés à la racine
Les bots téléchargent les zip, les `.sql`, les `.bak` et les `.env` laissés à la racine. Après un incident, les chercher et les retirer du web fait partie du nettoyage, pas d'un audit « luxe ». Une archive publique est une copie de votre site offerte.
Les bots les téléchargent. Après un incident, cherchez *.zip, *.sql, *.bak, .env. Les retirer fait partie du nettoyage, pas d'un audit « luxe ».
Ce que « à la racine » veut dire pour un bot
Des listes de chemins circulent : `/backup.zip`, `/site.sql`, `/wp.zip`, `/old/`, `/dev/`. Ce n'est pas du ciblage artisanal. C'est du volume. Si le fichier répond 200, il est pris. Votre robots.txt ne les arrête pas : ils ne sont pas Googlebot poli.
Après un piratage, deux cas. L'attaquant a posé ou trouvé ces archives. Ou vous les aviez déjà (une « copie avant mise à jour »), et elles ont servi. Dans les deux, elles sortent du web maintenant.
Un listing de répertoire (`index of`) transforme le dossier en catalogue. Coupez le listing, même après avoir retiré les fichiers. Les premiers gestes : copie ailleurs, puis on range la prod.
Zip, sql, bak, dist, old
Les dumps SQL : base entière, users, options, parfois des emails. Un `.sql` public est plus proche d'une fuite qu'un défacement. Tournez ce qui était dans le dump (hashs, clés), évaluez le volet personnes.
Les zip de site : fichiers + parfois `wp-config`. Même traitement que le dump, côté secrets. `wp-config`.
`.bak`, `.old`, `.orig`, `~`, `dist`, `dev.zip`, copies de `wp-config.php.save` : les CMS et les éditeurs en laissent. Cherchez par extension et par nom, pas seulement « backup.zip ».
- `*.zip`, `*.tar`, `*.sql`, `*.bak`, `*.env`.
- Dossiers `old`, `backup`, `dev`, `copy`.
- Fichiers `wp-config*.php*` hors le seul légitime.
`.DS_Store`, listing, et les noms qui parlent
`.DS_Store` (macOS) et `Thumbs.db` révèlent des noms de fichiers du dossier. Moins grave qu'un SQL, assez pour indiquer `backup-mars.sql` au bot suivant. On les retire du web, on ignore dans Git, on coupe le listing.
Un index Apache qui affiche `dump-clients.sql` est un panneau. `Options -Indexes` (ou l'équivalent panel) n'est pas optionnel après incident.
Les noms « clever » (`bckp`, `1.sql_`, `site.ZIP`) ne protègent pas. Les bots ont aussi ces listes.
Retirer du web n'est pas tout jeter
Déplacez hors DocumentRoot, ou supprimez si vous avez déjà une copie hors serveur. Ne laissez pas un 200. Un 403 sur un zip encore présent, le fichier est encore là pour qui a le FTP — déjà mieux, insuffisant si le panel est douteux. Mieux : plus de fichier sur ce compte.
Ne « cachez » pas en renommant `backup.zip` en `b.zip`. Sortez-le.
Ouvrez avant de jeter si c'est votre seule sauvegarde : lisez-la hors prod, comme une archive Updraft. Puis sortez-la du web.
La sauvegarde qui était le filet
Updraft, BackWPup, un zip cPanel posé dans `public_html` : ce n'est pas un filet, c'est une offre. Les prochaines sauvegardes partent hors HTTP, hors le même utilisateur. Sauvegardes hors serveur.
Si l'archive a été publique, considérez secrets et, si SQL, données : rotation, constat. La fenêtre d'exposition se date (journaux, `Last-Modified`) tant qu'on peut.
Un rançongiciel sur le même compte chiffre aussi ces zip. Encore une raison de ne pas les laisser là.
Après : ne plus poser ça en HTTP
Règle d'équipe : pas d'archive dans le DocumentRoot, même « une heure ». Le panel a un gestionnaire de backups. Le SFTP envoie vers un disque mort. Git n'est pas un backup de prod (et `.git` public est un autre article).
Interdisez le listing. Surveillez l'apparition de `*.zip` / `*.sql` à la racine. Surveillance.
Les prestataires qui « zippent sur le FTP pour que vous téléchargiez » doivent passer par un coffre ou un lien signé hors webroot. Accès prestataire.
Cousins : `.env`, `.git`, phpinfo
Même passe fichiers : `.env`, `.git`, `phpinfo`, Adminer, `debug.log`. Une heure, une liste, pas cinq devis. `.env`, `.git`, phpinfo, Adminer.
Un `composer.lock` public n'est pas une fuite. Un `id_rsa` ou un `.env` , si. Distinguez dans la chasse, pas dans la négligence : on parcourt, on trie.
Headless : le front Vercel n'a pas ces zip, l'origine WP chez o2switch si. Inspectez l'origine. Headless.
Décider une passe fichiers, pas un scan théâtre
Un scanner en ligne qui crie « backup found » est un signal, pas un inventaire. Vous (ou nous) listons le DocumentRoot par extensions. C'est fastidieux et ça clôt.
Ne payez pas un « audit dark web » avant d'avoir retiré le `dump.sql` encore en 200. L'ordre a un sens.
Créer un compte : si vous savez qu'un zip traîne, dites-le. On le sort en premier, avant le débat SEO. Parfois c'est le vrai incident, le défacement n'était que le bruit.