Vulnerabilità di wp-config.php: rafforzare la sicurezza di WordPress

Mentre wp-config.php era aperto in vi, la copia di swap (.swp) creata nella stessa cartella si poteva aprire direttamente da un indirizzo web. L'ho verificato sul mio server il 2026-09-13, e quella copia conteneva la password del database e tutte le chiavi di sicurezza.
Per la sicurezza di wp-config.php controlla in ordine, dall'alto verso il basso, i sei punti qui sotto.
1️⃣ Cosa succede se wp-config.php viene esposto
wp-config.php contiene nome, utente e password del database, più le 8 chiavi di sicurezza che cifrano i cookie di login.

Se questo file viene esposto, un attaccante può collegarsi direttamente al database o falsificare le sessioni di login con le chiavi di sicurezza e prendersi i diritti di amministratore.
2️⃣ Limitare i permessi del file a 600
WordPress di solito imposta le cartelle a 755 e i file a 644, ma wp-config.php va limitato a 600, così solo il proprietario può leggerlo e scriverlo. Ecco il comando eseguito sul sito di test testpilotweb.com.
chmod 600 /home/testpilotweb/www/wp-config.php
stat -c '%a %U' /home/testpilotweb/www/wp-config.php
600 testpilotwebSui server in cui PHP gira con un account diverso dal proprietario del file, con 600 WordPress non riesce a leggerlo e il sito non si apre. Su testpilotweb.com PHP-FPM gira con lo stesso account del proprietario, quindi dopo la modifica il sito si è aperto normalmente.
Sugli hosting condivisi senza SSH, imposta lo stesso valore dal menu dei permessi del programma FTP o del File Manager di cPanel.
3️⃣ Bloccare l'accesso dal server web
Se non puoi cambiare i permessi o vuoi un livello di protezione in più, fai in modo che il server web rifiuti del tutto le richieste a wp-config.php.
🔲 Apache (.htaccess)
<Files wp-config.php>
Require all denied
</Files>Le righe [order allow,deny] e [deny from all], frequenti negli articoli più vecchi, sono sintassi di Apache 2.2. In Apache 2.4 funzionano solo se è attivo il modulo di compatibilità (mod_access_compat).
🔲 nginx
nginx non legge .htaccess, quindi la regola [location] va nel file di configurazione del server; anche il mio server risponde 403 in questo modo.
location ~* /wp-config(-sample)?\.php$ {
deny all;
}Fai l'escape del punto nell'espressione regolare con [\.]. Se lasci il punto così com'è, vengono bloccati anche indirizzi di articoli come [/wp-config-php-impostazioni-di-base/]; a me è già successo che un articolo desse 403 proprio per questo errore.
4️⃣ Bloccare i file temporanei dell'editor e i file di backup
La copia [.swp] creata mentre un file è aperto in vi e la copia [.bak] lasciata prima della modifica non vengono eseguite come PHP: vengono servite come testo semplice.
In nginx si bloccano entrambi i tipi insieme; [444] è un codice esclusivo di nginx che chiude la connessione senza risposta.
location ~ \.sw[opx]$ { return 444; }
location ~* (\.(bak|orig|old|save)|_ori|\.bak\.[0-9]+)$ { return 444; }5️⃣ Spostarlo un livello sopra la web root
WordPress cerca wp-config.php prima nella cartella di installazione e, se non c'è, lo carica dalla cartella immediatamente sopra. Spostando il file un livello sopra [public_html], non è più raggiungibile da nessun indirizzo web.
Però, se nella cartella sopra c'è il [wp-settings.php] di un'altra installazione WordPress, WordPress non legge il wp-config.php di quella cartella. Dopo lo spostamento controlla subito che il sito e la bacheca si aprano.
6️⃣ Disattivare la modifica dei file
Così disattivi i menu ‘Editor dei file del tema’ e ‘Editor dei file dei plugin’ della bacheca di WordPress. Anche se un attaccante si impadronisce dei diritti di amministrazione, è una delle difese più forti contro l'inserimento di codice malevolo via web.
define('DISALLOW_FILE_EDIT', true); 7️⃣ Eliminare wp-config-sample.php
wp-config-sample.php è un file di esempio usato durante l'installazione, quindi puoi eliminarlo quando hai finito. Non contiene nulla di sensibile, ma gli attaccanti lo cercano nel percorso predefinito, quindi non c'è motivo di tenerlo.
Le righe reali del file di esempio e il significato di ogni voce sono spiegati nell'articolo Impostazioni di base di wp-config.php dedicato all'argomento. Se non lo elimini, la parte [(-sample)?] della regola nginx qui sopra blocca anche questo file.
ℹ️ Informativa sull'affiliazione
I contenuti di questo sito includono link di affiliazione. Se un visitatore acquista un prodotto o un servizio tramite uno di questi link, il sito riceve una commissione dal venditore. In questo processo l'importo pagato dall'acquirente (durante le promozioni l'importo scende↓) non aumenta. Prezzi, sconti e disponibilità indicati si riferiscono al momento della stesura e possono differire da quelli reali: prima di acquistare verifica sempre presso il venditore. I prodotti vengono scelti e valutati secondo criteri propri, e le commissioni non influiscono sull'ordine di presentazione né sul contenuto delle valutazioni.