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
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
- Aggiorna tutto — Nucleo, plugin, temi, PHP.
- Togli quello che non usi — Un plugin disattivato resta comunque un file su disco, e raggiungibile.
- Impedisci che i caricamenti vengano eseguiti — Nessun handler PHP nella cartella dei caricamenti.
- Verifica in due passaggi sul pannello e sul CMS —