WordPress Hackerato: Guida di Emergenza in 12 Step per il Recovery

8 aprile 20267 minSicurezza
In breveAI

Se il tuo sito WordPress è stato hackerato, non panico. Segui una procedura di 12 step per risolvere il problema e prevenire la reinfezione. Scopri come confermare l'hack, mettere il sito in manutenzione e cambiare tutte le password per garantire la sicurezza del tuo sito web.

Il Tuo Sito WordPress È Stato Hackerato. Ecco Cosa Fare Adesso.

Niente panico. Bene, un po’ di panico è normale. Ma hai bisogno di una procedura, non di panico. Questo articolo è quella procedura: 12 step in ordine, dalla scoperta alla prevenzione della reinfezione.

Salva questa pagina nei preferiti. Spera di non doverla mai usare. Ma se succede, sarai contento di averla.

Step 1: Conferma l’Hack (5 minuti)

Prima di tutto, assicurati che sia un hack e non un bug. I sintomi reali:

  • Redirect a siti spam (farmaceutici, poker, adult)
  • Pagine nuove che non hai creato (di solito in lingue straniere)
  • Google mostra “Questo sito potrebbe essere stato compromesso” nei risultati
  • Utenti admin che non riconosci nella lista utenti
  • File .php sconosciuti nella directory uploads
  • Il sito è in bianco con errori 500 improvvisi
  • Email di Wordfence/Sucuri che segnalano file modificati

Se vedi anche uno solo di questi sintomi, procedi con gli step successivi.

Step 2: Metti il Sito in Manutenzione (2 minuti)

Togli il sito dalla vista pubblica immediatamente. Non per nascondere il problema, ma per fermare la diffusione del malware ai visitatori.

# Via WP-CLI (il più rapido)
wp maintenance-mode activate

# O manualmente: crea un file .maintenance nella root
<?php $upgrading = time(); ?>

Se non puoi accedere a WordPress (wp-admin compromesso), blocca il traffico da Nginx/Apache:

# Nginx: redirect tutto a una pagina statica di manutenzione
location / {
    return 503;
}
error_page 503 /maintenance.html;
location = /maintenance.html {
    root /var/www/static;
}

Step 3: Cambia TUTTE le Password (10 minuti)

Tutte. Non solo quella di admin. Tutte:

  • ✅ Password di tutti gli utenti WordPress (specialmente admin e editor)
  • ✅ Password database MySQL
  • ✅ Password FTP/SFTP
  • ✅ Password pannello hosting (cPanel, Plesk)
  • ✅ API key esterne (Stripe, Mailchimp, etc.)
  • ✅ Salt e security key di WordPress (in wp-config.php)

Per rigenerare salt e security key:

# Genera nuove chiavi
curl -s https://api.wordpress.org/secret-key/1.1/salt/

# Copia l'output e sostituisci le chiavi in wp-config.php

Questo invalida tutte le sessioni attive, forzando il logout di chiunque sia connesso (incluso l’attaccante).

Step 4: Identifica il Vettore di Attacco (15-30 minuti)

Capire come sono entrati è fondamentale per evitare la reinfezione. I vettori più comuni:

# Cerca file PHP nella directory uploads (non dovrebbero esserci)
find wp-content/uploads -name "*.php" -type f

# Cerca file modificati negli ultimi 7 giorni
find . -name "*.php" -mtime -7 -type f

# Cerca pattern di backdoor comuni
grep -r "eval(base64_decode" wp-content/ --include="*.php"
grep -r "system(\$_" wp-content/ --include="*.php"
grep -r "exec(\$_" wp-content/ --include="*.php"
grep -r "wp_create_user" wp-content/ --include="*.php" 

# Controlla gli utenti admin nel database
wp user list --role=administrator

Se trovi file PHP in wp-content/uploads/, è quasi sempre una web shell (backdoor). Il nome del file è spesso randomizzato: wp-tmp.php, class-cache.php, social-icons.php.

Step 5: Ripristina da Backup Pulito (15-30 minuti)

Se hai un backup recente e pulito (pre-infezione), usalo. È il metodo più affidabile.

# Verifica le date dei backup disponibili
ls -la /path/to/backups/

# Ripristina il backup (esempio con WP-CLI e backup SQL)
wp db import backup-2026-03-20.sql

# Ripristina i file (escludi wp-config.php che ha le nuove password)
rsync -avz --exclude='wp-config.php' /path/to/backup/files/ /var/www/html/

Attenzione: il backup potrebbe già contenere la backdoor in forma dormiente. Dopo il ripristino, esegui comunque gli step 6-8.

Step 6: Pulizia Manuale (30-60 minuti)

Se non hai un backup pulito, devi pulire a mano:

  1. Core WordPress: scarica una copia fresca da wordpress.org e sostituisci tutti i file del core (NON toccare wp-content e wp-config.php)
  2. Plugin: cancella tutti i plugin e reinstallali dal repository WordPress. I plugin premium, scaricali di nuovo dal vendor
  3. Temi: stessa cosa. Cancella e reinstalla. Se hai un tema child, revisiona ogni file PHP riga per riga
  4. uploads: cerca e cancella qualsiasi file .php, .phtml, .php5 nella directory uploads
  5. wp-config.php: verifica che non contenga codice sospetto (eval, base64_decode, include di file remoti)
# Reinstalla il core WordPress
wp core download --force --skip-content

# Reinstalla tutti i plugin
wp plugin install $(wp plugin list --field=name --format=csv) --force

# Cerca e cancella PHP in uploads
find wp-content/uploads -name "*.php" -delete
find wp-content/uploads -name "*.phtml" -delete

Step 7: Scansione Post-Pulizia (15 minuti)

# Wordfence scan completo
wp wordfence scan

# O Sucuri CLI scanner
# O manualmente:
grep -r "eval(" wp-content/ --include="*.php" | grep -v "node_modules"
grep -r "base64_decode" wp-content/ --include="*.php"
grep -r "\$_REQUEST\[" wp-content/ --include="*.php"

Se trovi ancora file sospetti dopo la pulizia, ripeti lo step 6. Se persistono, potrebbe esserci una backdoor nel database (in un post, widget, o option con codice PHP):

# Cerca codice sospetto nel database
wp db query "SELECT * FROM wp_options WHERE option_value LIKE '%eval(%' LIMIT 10"
wp db query "SELECT ID, post_title FROM wp_posts WHERE post_content LIKE '%base64_decode%'"

Step 8: Hardening Post-Recovery (20 minuti)

Dopo la pulizia, blinda il sito per prevenire la reinfezione:

# Permessi file corretti
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
chmod 600 wp-config.php

# Blocca esecuzione PHP in uploads (Nginx)
# Aggiungi nel server block:
location ~* /wp-content/uploads/.*\.php$ { deny all; }

# Blocca xmlrpc.php
location = /xmlrpc.php { deny all; }

# Disabilita file editing da wp-admin
# In wp-config.php:
define('DISALLOW_FILE_EDIT', true);

Step 9: Controlla Google Search Console (5 minuti)

Se Google ha rilevato il malware, il sito potrebbe avere un manual action. Vai in Search Console → Sicurezza e azioni manuali → Problemi di sicurezza.

Se ci sono problemi segnalati, dopo la pulizia clicca “Richiedi una revisione”. Google rivede il sito entro 72 ore e, se pulito, rimuove l’avviso.

Step 10: Notifica il Cliente (5 minuti)

Template email (adatta al caso):

Oggetto: Aggiornamento sicurezza [NomeSito]

Abbiamo rilevato e risolto un problema di sicurezza sul sito [NomeSito]. Il sito è stato ripristinato e le misure di protezione sono state rafforzate. Nessun dato personale è stato compromesso [se vero]. Il sito è tornato online e funzionante. Abbiamo implementato protezioni aggiuntive per prevenire incidenti futuri. Siamo a disposizione per qualsiasi domanda.

Sii onesto. Non minimizzare. Non esagerare. Fatti, azioni prese, prevenzione futura.

Step 11: Documenta Tutto (10 minuti)

Scrivi un post-mortem interno:

  • Data e ora del rilevamento
  • Come è stato scoperto (alert automatico, segnalazione cliente, Google)
  • Vettore di attacco identificato
  • Azioni di remediation prese
  • Tempo di downtime
  • Lezioni apprese
  • Azioni preventive implementate

Step 12: Prevenzione Reinfezione

Il 25% dei siti WordPress hackerati viene reinfettato. Le cause:

  • Backdoor non trovata nella pulizia (la più comune)
  • Vulnerabilità non patchata (plugin non aggiornato)
  • Password riutilizzate (cambiate ma uguali a prima)
  • Altro sito sullo stesso server compromesso

La checklist post-incident è nella nostra guida completa alla sicurezza WordPress.

FAQ

Quanto costa far pulire un sito hackerato?

Sucuri offre cleanup a partire da $199/anno (incluso nel piano). Wordfence Site Cleaning costa $490 per intervento. Freelance specializzati: $200-500. Se lo fai internamente con la procedura di questo articolo, il costo è il tuo tempo (2-4 ore).

Il backup su UpdraftPlus è sufficiente?

Sì, se è configurato per salvare off-site (S3, Google Drive, Dropbox) e con retention di almeno 30 giorni. Backup solo sul server = inutile se il server è compromesso. Verifica che i backup funzionino: ripristina uno su un ambiente di test almeno una volta al trimestre.

Devo denunciare l’hack?

Se dati personali sono stati compromessi (utenti, ordini e-commerce, form con dati sensibili), il GDPR richiede la notifica al Garante entro 72 ore dalla scoperta. Se non ci sono dati personali coinvolti, non c’è obbligo di denuncia. In ogni caso, documenta tutto.

Posso prevenire al 100% gli hack?

No. Puoi ridurre il rischio al minimo, ma il rischio zero non esiste. L’obiettivo non è essere inviolabili, è: 1) rendere l’attacco più costoso del beneficio per l’attaccante, 2) rilevare l’intrusione velocemente, 3) ripristinare in minuti. Questo è “sicurezza” nel mondo reale.

Gestisci i siti WordPress dei tuoi clienti?

AgencyPilot ti dà report AI, uptime monitoring, backup e portale clienti in un’unica dashboard. Gratis per 3 siti.

Prova gratis
Leggi anche
Tutti gli articoli
Tutti gli articoli