Cancellare i file che si vedono è la parte che fanno tutti, e da sola fallisce: la via d'ingresso è ancora aperta, e nel giro di ore il sito è di nuovo infetto. L'ordine qui sotto chiude la porta prima di pulire la stanza.

1. Prima toglilo dalla rete

Un sito violato manda spam o serve malware ai tuoi visitatori proprio mentre tu ci lavori. Ferma quello prima di ogni altra cosa.

# a holding page that returns 503, so search engines come back later
# rather than dropping your pages

2. Copia tutto prima di modificarlo

Fai una copia completa — file e database — prima di cancellare una sola cosa. È una prova: ti dice come sono entrati, e senza di essa vai a indovinare.

3. Trova la via d'ingresso

Quasi sempre è una di quattro. Cerca nel log degli accessi la prima comparsa di un file modificato, attorno al suo orario.

  • Un plugin o un tema non aggiornato — di gran lunga il caso più frequente.
  • Una password riusata — trapelata altrove e provata qui.
  • Una cartella di caricamento che esegue PHP — un file caricato come immagine e poi eseguito.
  • Credenziali FTP o SSH rubate, spesso da un computer di lavoro infetto.
find . -type f -mtime -7 -name "*.php" | head -50
grep -rl "eval(base64_decode" . | head

4. Ripulisci da una copia sana, non modificando

Sostituisci il nucleo, i plugin e i temi con scaricamenti nuovi. Tieni soltanto i tuoi contenuti e i tuoi caricamenti, e ispeziona anche quelli: un file PHP dentro una cartella di caricamento non è mai legittimo.

find wp-content/uploads -name "*.php" -o -name "*.phtml"

5. Il passo che quasi tutti saltano

Cambia ogni credenziale che il server violato poteva vedere, e invalida ogni sessione. Se salti questo, l'attaccante rientra tranquillamente con la password che ha già.

  • Ogni utenza di amministrazione del CMS.
  • L'utente del database, e il file di configurazione che lo contiene.
  • Le chiavi FTP, SFTP e SSH.
  • Le chiavi API e le credenziali di pagamento conservate sul server.
  • WordPress: cambia i salt in wp-config.php — così esce tutti, loro compresi.

6. E poi chiudi la porta

  1. Aggiorna tutto — Nucleo, plugin, temi, PHP.
  2. Togli quello che non usi — Un plugin disattivato resta comunque un file su disco, e raggiungibile.
  3. Impedisci che i caricamenti vengano eseguiti — Nessun handler PHP nella cartella dei caricamenti.
  4. Verifica in due passaggi sul pannello e sul CMS
Chiedi al tuo hoster il log degli accessi del giorno in cui è cominciata. La richiesta che ha depositato il primo file è lì dentro, e nomina il buco in una riga.