Come scovare il malware nascosto nel Database di WordPress

👤 MARCO
📅 10 Gennaio 2026

Quando un sito WordPress viene compromesso, l’istinto è quello di cancellare file sospetti e pulire i plugin. Tuttavia, molti malware moderni sono progettati per la “persistenza”: si nascondono nel database per rigenerarsi o per reindirizzare i visitatori anche dopo che avete pulito i file.

Se state affrontando una bonifica, ignorare il database (o limitarsi a sovrascrivere i file del core) è un errore fatale. Ecco una guida pratica su come interrogare il vostro database MySQL/MariaDB per individuare tracce di infezione, senza perderci in tecnicismi inutili.

Premessa fondamentale

Prima di eseguire qualsiasi operazione o query di modifica, fate un backup completo del database (esportatelo in formato .sql).

1. Caccia agli “Amministratori Fantasma”

La prima cosa che fa un hacker è crearsi una porta di servizio. Spesso inseriscono un nuovo utente con privilegi di amministratore per poter rientrare se cambiate la vostra password.

Cosa fare: Aprite phpMyAdmin e controllate la tabella wp_users.

Query SQL rapida:

SQL

SELECT * FROM wp_users;

Cosa cercare:

  • Utenti che non avete creato voi.
  • Email con domini strani o temporanei.
  • Nomi utente generici come wp_support, admin_help, o stringhe casuali. Se ne trovate uno, non limitatevi a cambiare la password: eliminatelo immediatamente.

2. Iniezioni nei contenuti (SEO Spam e Redirect)

A volte il sito sembra pulito, ma le vecchie pagine contengono link a siti di scommesse, farmaci o materiale per adulti. L’hacker inietta script o iframe direttamente nel testo dei vostri articoli.

Cosa fare: Controllate la tabella wp_posts.

Query SQL per trovare script sospetti:

SQL

SELECT ID, post_title FROM wp_posts WHERE post_content LIKE '%<script%';
SELECT ID, post_title FROM wp_posts WHERE post_content LIKE '%iframe%';
SELECT ID, post_title FROM wp_posts WHERE post_content LIKE '%display:none%';

Nota: Se usate plugin che inseriscono legittimamente script negli articoli, verificate i risultati uno per uno.

3. Il cuore dell’infezione: la tabella wp_options

Questa è la tabella più critica. Qui vengono salvati l’URL del sito e le configurazioni dei plugin. Gli hacker spesso modificano le opzioni siteurl e home per reindirizzare il traffico mobile, oppure nascondono codice malevolo dentro opzioni apparentemente innocue che vengono caricate automaticamente (“autoload”).

Query SQL di controllo:

SQL

SELECT * FROM wp_options WHERE option_value LIKE '%<script%';

Inoltre, cercate manualmente l’opzione active_plugins. A volte gli hacker attivano plugin “fantasma” che non esistono nella cartella plugin, ma che WordPress cerca di caricare, generando errori o vulnerabilità.

4. Il metodo “Chirurgico” (Analisi offline)

Se non siete esperti di SQL, c’è un metodo ancora più efficace e sicuro per un’analisi profonda.

  1. Esportate tutto il database in un file .sql non compresso.
  2. Aprite il file con un editor di testo evoluto (come Notepad++, Sublime Text o VS Code).
  3. Usate la funzione “Trova” per cercare queste stringhe tipiche dei malware PHP offuscati:
    • base64_decode (spesso usata per criptare il virus)
    • eval( (comando per eseguire codice PHP arbitrario)
    • gzinflate
    • shell_exec

Se trovate queste stringhe all’interno di blocchi di testo incomprensibili (una lunga serie di lettere e numeri senza senso logico), avete trovato l’infezione.

Conclusione

Un database pulito è essenziale quanto un file system pulito. Se state ripristinando un sito dopo un attacco, assicuratevi che le tabelle siano “bonificate” prima di riconnetterle a una nuova installazione di WordPress. Spesso, la soluzione migliore è ripartire da un database pulito importando solo i contenuti essenziali, lasciando indietro le tabelle di configurazione corrotte.