Come proteggere il file wp-config.php di WordPress
Il file wp-config.php è il cuore della configurazione di WordPress. Contiene le credenziali del database, le chiavi di sicurezza, il prefisso delle tabelle e altre impostazioni critiche. Se un attaccante riesce ad accedere a questo file, ha praticamente le chiavi del tuo sito: può leggere il database, modificare i contenuti, creare account admin e installare backdoor. Proteggere wp-config.php è una delle misure di sicurezza più importanti che puoi implementare sul tuo sito WordPress.
Cosa contiene wp-config.php e perché è critico
Il file wp-config.php contiene informazioni che, nelle mani sbagliate, permettono il controllo totale del sito:
- Credenziali del database: nome del database, utente, password e host. Con queste informazioni, chiunque può accedere direttamente al database e leggere o modificare qualsiasi dato — articoli, utenti, password, ordini WooCommerce.
- Chiavi di sicurezza e salt: otto costanti crittografiche usate per firmare i cookie di autenticazione. Se compromesse, un attaccante può generare cookie validi e accedere come qualsiasi utente senza conoscere la password.
- Prefisso delle tabelle: conoscerlo facilita attacchi SQL injection mirati.
- Modalità debug: se attiva in produzione, espone errori PHP con percorsi di file e dettagli tecnici utili per un attaccante.
Spostare wp-config.php fuori dalla root
Una delle protezioni più efficaci è spostare il file wp-config.php una directory sopra la cartella pubblica del sito. WordPress supporta nativamente questa configurazione: se non trova wp-config.php nella sua directory, lo cerca automaticamente nella directory genitore.
Se WordPress è installato in /var/www/html/, puoi spostare wp-config.php in /var/www/wp-config.php. Il file si troverà fuori dalla directory accessibile via web, rendendo impossibile l’accesso diretto tramite browser anche in caso di misconfigurazioni del server che permettano la lettura di file PHP come testo.
Questa tecnica funziona solo se WordPress è installato nella root del dominio o in una sottocartella di primo livello. Su hosting condivisi dove la struttura delle directory è gestita dal provider, potrebbe non essere possibile. Verifica con il supporto del tuo hosting prima di procedere.
Bloccare l’accesso via .htaccess
Se non puoi spostare il file, puoi bloccare l’accesso HTTP a wp-config.php tramite una regola nel file .htaccess. Aggiungi questo blocco nel file .htaccess nella root di WordPress:
<Files wp-config.php>
Order Allow,Deny
Deny from all
</Files>
Questa regola impedisce a qualsiasi richiesta HTTP di accedere al file. WordPress continuerà a leggerlo normalmente tramite PHP (che accede al filesystem locale, non via HTTP), ma nessun browser o bot potrà scaricarlo. Su server Nginx, la configurazione equivalente è:
location ~* wp-config.php {
deny all;
}
Impostare i permessi corretti
I permessi del file determinano chi può leggere, scrivere ed eseguire wp-config.php a livello di sistema operativo. I permessi consigliati sono:
- 640: il proprietario può leggere e scrivere, il gruppo può leggere, gli altri non hanno accesso. Questa è l’impostazione consigliata per la maggior parte degli hosting.
- 600: solo il proprietario può leggere e scrivere. Nessun altro utente del server può accedere al file. L’impostazione più restrittiva, ideale se il web server gira con lo stesso utente proprietario del file.
- 440: sola lettura per proprietario e gruppo. Da usare dopo la configurazione iniziale se non prevedi modifiche frequenti. Ricorda di ripristinare i permessi di scrittura se devi aggiornare il file.
Evita assolutamente i permessi 644 (che permettono a qualsiasi utente del server di leggere il file) e soprattutto 666 o 777 (che permettono a chiunque di leggere e scrivere). Per impostare i permessi via SSH:
chmod 640 wp-config.php
Rigenerare le chiavi di sicurezza
Le chiavi di sicurezza (AUTH_KEY, SECURE_AUTH_KEY, LOGGED_IN_KEY, NONCE_KEY e i rispettivi salt) sono stringhe casuali usate per crittografare i cookie di autenticazione. Se sospetti che il tuo sito sia stato compromesso, rigenerare queste chiavi è fondamentale: tutti i cookie esistenti vengono invalidati e tutti gli utenti (inclusi eventuali attaccanti) vengono disconnessi.
Per generare nuove chiavi, visita il generatore ufficiale di WordPress all’indirizzo api.wordpress.org/secret-key/1.1/salt/. Copia le otto righe generate e sostituiscile nel file wp-config.php. Dopo il salvataggio, dovrai effettuare nuovamente il login — questo è normale e conferma che le nuove chiavi funzionano.
È buona pratica rigenerare le chiavi periodicamente (ogni 3-6 mesi) e obbligatoriamente dopo: la scoperta di un’intrusione, il licenziamento di un collaboratore con accesso admin o la compromissione di un plugin.
Disabilitare la modifica dei file dalla dashboard
WordPress include un editor di codice integrato nella dashboard (Aspetto → Editor del tema e Plugin → Editor dei plugin) che permette di modificare i file PHP direttamente dal browser. Se un attaccante ottiene accesso a un account admin, può usare questo editor per iniettare codice malevolo senza bisogno di accesso FTP o SSH.
Disabilita l’editor aggiungendo questa riga a wp-config.php:
define('DISALLOW_FILE_EDIT', true);
Per una protezione ancora maggiore, puoi disabilitare anche l’installazione e l’aggiornamento di plugin e temi dalla dashboard:
define('DISALLOW_FILE_MODS', true);
Questa seconda opzione è più restrittiva: gli aggiornamenti di plugin, temi e core dovranno essere eseguiti manualmente via FTP, SSH o WP-CLI. È consigliata per siti in produzione dove le modifiche vengono gestite attraverso un workflow controllato.
Forzare SSL per il login e l’admin
Se il tuo sito ha SSL attivo (HTTPS), puoi forzare WordPress a usare sempre la connessione crittografata per il login e l’area admin:
define('FORCE_SSL_ADMIN', true);
Questa impostazione garantisce che le credenziali di accesso e i cookie di sessione vengano trasmessi solo su connessione crittografata, impedendo l’intercettazione su reti non sicure.
Disabilitare il debug in produzione
La modalità debug di WordPress è uno strumento indispensabile durante lo sviluppo ma un rischio di sicurezza in produzione. Quando attiva, gli errori PHP vengono mostrati sullo schermo, rivelando percorsi dei file, nomi delle tabelle del database, versioni di plugin e altre informazioni utili per un attaccante.
Assicurati che queste righe siano presenti in wp-config.php in produzione:
define('WP_DEBUG', false);
define('WP_DEBUG_DISPLAY', false);
define('WP_DEBUG_LOG', false);
Se hai bisogno di debug in produzione per diagnosticare un problema, attiva solo il log su file (WP_DEBUG_LOG = true) senza mostrare gli errori a schermo (WP_DEBUG_DISPLAY = false). Ricorda di disattivare il debug e cancellare il file di log quando hai finito.
Limitare le revisioni e gli autosave
Due impostazioni in wp-config.php che migliorano sia la sicurezza che le prestazioni:
define('WP_POST_REVISIONS', 3);
define('AUTOSAVE_INTERVAL', 120);
Limitare le revisioni a 3 riduce la superficie di attacco nel database (meno dati sensibili archiviati) e alleggerisce il database. Aumentare l’intervallo di autosave da 60 a 120 secondi riduce le richieste AJAX verso il server.
Il tuo wp-config.php è al sicuro?
La protezione di wp-config.php è solo uno degli aspetti della sicurezza WordPress, ma è tra i più critici. Se non sei sicuro che il tuo sito sia configurato in modo sicuro, o se sospetti che il file sia stato compromesso, il team di SoccorsoWP può eseguire un audit di sicurezza completo, verificare la configurazione di wp-config.php e implementare tutte le protezioni necessarie. Apri un ticket e metti al sicuro il cuore del tuo sito.