WordPress alimenta oltre il 40% del web, il che lo rende un bersaglio preferito per gli attacchi automatizzati. La buona notizia: la maggior parte degli hack WordPress riusciti sfrutta vulnerabilità note e facilmente prevenibili. Questa checklist ti guida attraverso ogni livello della sicurezza di WordPress, dalla crittografia del trasporto all'hardening a livello di server. Lavoraci sistematicamente e il tuo sito sarà significativamente più difficile da compromettere rispetto alla stragrande maggioranza delle installazioni WordPress.
Proteggere il tuo sito WordPress con SSL e HTTPS
HTTPS crittografa tutti i dati che viaggiano tra i browser dei tuoi visitatori e il tuo server. Senza di esso, le credenziali di login, gli invii di moduli e i cookie di sessione vengono inviati in chiaro, rendendoli facilmente intercettabili sulle reti pubbliche.
- Installa un certificato SSL valido: la maggior parte dei provider di hosting offre certificati Let's Encrypt gratuiti che si rinnovano automaticamente ogni 90 giorni. Se il tuo host non supporta Let's Encrypt, il piano gratuito di Cloudflare include un certificato SSL condiviso. Non c'è motivo di funzionare senza HTTPS nel 2025.
- Reindirizza tutto il traffico HTTP a HTTPS: imposta un redirect 301 in modo che ogni richiesta a
http://venga inoltrata permanentemente ahttps://. Su Apache, aggiungi questo al tuo.htaccess:
Su Nginx, aggiungi un server block che reindirizza:RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]server { listen 80; server_name example.com www.example.com; return 301 https://$host$request_uri; } - Risolvi tutti gli avvisi di mixed content: dopo essere passato a HTTPS, cerca immagini, script o fogli di stile che si caricano ancora su HTTP. La console del browser li segnala come avvisi di "Mixed Content". Aggiorna gli URL
http://hardcoded nel tuo database con uno strumento di find-and-replace come Better Search Replace. - Abilita l'intestazione HSTS: HTTP Strict Transport Security dice ai browser di usare sempre HTTPS per il tuo dominio, anche se un utente digita manualmente
http://. Aggiungi questa intestazione con un max-age di almeno sei mesi (15768000 secondi). AbilitaincludeSubDomainssolo se tutti i tuoi sottodomini supportano anche HTTPS.
Configurare le intestazioni di sicurezza HTTP per WordPress
Le intestazioni di sicurezza sono istruzioni che il tuo server invia al browser. Non costano nulla in termini di prestazioni, ma forniscono una protezione significativa contro vettori di attacco comuni come clickjacking, MIME-type confusion e cross-site scripting.
- X-Frame-Options: SAMEORIGIN: impedisce che le tue pagine vengano incorporate in iframe su altri domini. Questo blocca gli attacchi di clickjacking in cui un attaccante sovrappone elementi invisibili sul tuo sito per ingannare gli utenti a cliccare qualcosa che non intendevano.
- X-Content-Type-Options: nosniff: impedisce ai browser di indovinare il MIME-type di un file. Senza questa intestazione, un browser potrebbe eseguire un file di testo come JavaScript se il contenuto sembra codice, aprendo la porta all'iniezione di script.
- Referrer-Policy: strict-origin-when-cross-origin: controlla quante informazioni dell'URL vengono inviate quando si naviga verso siti esterni. Questo previene la fuga di parametri URL sensibili (come i token di reset della password) a server di terze parti.
- Permissions-Policy: limita l'accesso alle funzionalità del browser come camera, microfono, geolocalizzazione e API di pagamento per contenuti incorporati. Anche se non utilizzi queste funzionalità, impostare la policy impedisce che script iniettati le abusino.
- Content-Security-Policy (CSP): l'intestazione di sicurezza più potente, ma anche la più complessa da configurare. CSP definisce quali fonti possono caricare script, stili, immagini e altre risorse. Inizia con
Content-Security-Policy-Report-Onlyper monitorare le violazioni senza rompere il tuo sito, quindi inasprisci gradualmente la policy. Un punto di partenza minimo:Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:;
Puoi impostare queste intestazioni nel tuo file .htaccess (Apache), nella tua config Nginx o tramite un plugin di sicurezza WordPress. Se utilizzi Cloudflare, puoi configurare la maggior parte di esse anche sotto Security > Settings.
Tecniche di hardening per WordPress core
WordPress stesso è ben mantenuto e regolarmente patchato, ma la configurazione predefinita lascia diverse porte aperte che dovresti chiudere intenzionalmente.
- Mantieni aggiornati il core di WordPress, i plugin e i temi: la maggior parte degli hack WordPress sfrutta vulnerabilità note in software obsoleto. Abilita gli aggiornamenti automatici minori (sono attivi per impostazione predefinita) e controlla gli aggiornamenti principali almeno settimanalmente. Considera gli aggiornamenti automatici dei plugin per i plugin affidabili.
- Rimuovi completamente i plugin e i temi non utilizzati: disattivare un plugin non rimuove il codice dal tuo server. Un attaccante può ancora sfruttare le vulnerabilità nei plugin disattivati. Elimina tutto ciò che non stai usando attivamente e mantieni solo un tema predefinito come backup.
- Disabilita XML-RPC: l'interfaccia XML-RPC (
/xmlrpc.php) è progettata per la pubblicazione remota e i pingback. Oggi viene principalmente abusata per attacchi di amplificazione brute-force e DDoS. A meno che non ne abbia bisogno per Jetpack o l'app mobile di WordPress, disabilitala completamente. Puoi bloccarla a livello di server:# Apache .htaccess <Files xmlrpc.php> Order Deny,Allow Deny from all </Files> - Limita l'endpoint utenti della REST API: per impostazione predefinita,
/wp-json/wp/v2/usersespone i nomi utente a chiunque. Questo rende banale per gli attaccanti scoprire nomi di login validi. Limita questo endpoint solo alle richieste autenticate, con un plugin o uno snippet di codice personalizzato. - Blocca l'enumerazione degli utenti tramite gli archivi degli autori: anche senza la REST API, gli attaccanti possono scoprire i nomi utente richiedendo
/?author=1,/?author=2, ecc. Blocca questo reindirizzando le richieste agli archivi degli autori o disabilitandoli completamente se il tuo sito non ne ha bisogno. - Rimuovi il numero di versione di WordPress: WordPress visualizza la sua versione in un meta-tag e negli URL dei file core CSS/JS. Sebbene la sicurezza tramite oscurità da sola sia insufficiente, rimuovere il numero di versione costringe gli attaccanti a fare ricerche invece di cercare semplicemente le vulnerabilità note per la tua versione esatta.
- Proteggi o rimuovi il file debug.log: quando
WP_DEBUG_LOGè abilitato, WordPress scrive gli errori in/wp-content/debug.log. Questo file può contenere query del database, percorsi dei file, errori dei plugin e altre informazioni utili agli attaccanti. Non lasciare mai il logging di debug abilitato in produzione e, se il file esiste, eliminalo o blocca l'accesso ad esso. - Usa password forti e univoche e abilita l'autenticazione a due fattori: ogni account WordPress dovrebbe avere una password lunga almeno 16 caratteri e unica per quel sito. Aggiungi l'autenticazione a due fattori (2FA) con un plugin come WP 2FA o Wordfence Login Security. Questa singola misura blocca praticamente tutti gli attacchi brute-force.
- Limita i tentativi di login: WordPress consente tentativi di login illimitati per impostazione predefinita. Usa un plugin come Limit Login Attempts Reloaded per bloccare gli IP dopo alcuni tentativi falliti, o usa un Web Application Firewall (WAF) con protezione brute-force.
- Cambia il prefisso predefinito delle tabelle del database: WordPress usa
wp_come prefisso predefinito per le tabelle. Cambiarlo in qualcosa di unico durante l'installazione rende leggermente più difficili gli attacchi di SQL injection automatizzati. Se il tuo sito è già live, puoi ancora cambiarlo, ma fai prima il backup del tuo database.
Permessi dei file e sicurezza del server in WordPress
I permessi dei file controllano chi può leggere, scrivere ed eseguire i file sul tuo server. Permessi errati sono una delle errate configurazioni di sicurezza più comuni.
- Imposta i permessi dei file corretti: usa 644 per i file e 755 per le directory. Il file
wp-config.phpdovrebbe essere impostato a 600 o 640 nella maggior parte degli ambienti di hosting. Non usare mai 777, che concede l'accesso completo in lettura/scrittura/esecuzione a chiunque. - Proteggi wp-config.php dall'accesso web: questo file contiene le tue credenziali del database, le chiavi di autenticazione e i salt. Su Apache, aggiungi questo a
.htaccess:
Alcune guide di sicurezza suggeriscono di spostare<Files wp-config.php> Order Allow,Deny Deny from all </Files>wp-config.phpuna directory sopra la webroot. Questo funziona sulla maggior parte delle configurazioni, ma può causare problemi con alcuni provider di hosting. - Disabilita l'editor di file integrato: WordPress include un editor di file nel pannello di amministrazione che permette agli amministratori di modificare direttamente i file di tema e plugin. Se un attaccante ottiene l'accesso amministratore, questo editor gli dà la capacità di iniettare codice malevolo in qualsiasi file PHP. Disabilitalo aggiungendo questa riga a
wp-config.php:define('DISALLOW_FILE_EDIT', true); - Blocca l'accesso ai file sensibili: file come
readme.html,license.txtewp-config-sample.phprivelano informazioni sulla tua versione e configurazione di WordPress. Blocca l'accesso pubblico ad essi tramite la configurazione del tuo server. - Disabilita il directory browsing: se il directory listing è abilitato, chiunque può sfogliare la tua cartella
/wp-content/uploads/e vedere ogni file che hai caricato. Disabilitalo aggiungendoOptions -Indexesal tuo.htaccess.
Strategia di backup di WordPress e pianificazione del ripristino
Nessuna configurazione di sicurezza è completa senza una strategia di backup affidabile. Se il peggio accade, un backup recente è la differenza tra un piccolo inconveniente e la perdita totale.
- Automatizza i backup giornalieri: usa un plugin come UpdraftPlus, BlogVault o BackWPup per eseguire backup automatici secondo un programma. Esegui il backup almeno giornalmente. I siti ad alto traffico o i negozi WooCommerce dovrebbero considerare backup in tempo reale.
- Conserva i backup off-site: mantieni le copie su un servizio esterno come Amazon S3, Google Cloud Storage o Dropbox. Se il tuo server viene compromesso, anche i backup locali potrebbero essere colpiti.
- Testa il tuo processo di ripristino: un backup che non hai mai testato è un backup di cui non puoi fidarti. Ripristina il tuo backup almeno una volta al trimestre in un ambiente di staging per confermare che funzioni.
- Conserva più generazioni di backup: mantieni almeno 30 giorni di backup giornalieri. Alcune infezioni rimangono inosservate per settimane, quindi hai bisogno della capacità di tornare indietro a uno stato noto pulito.
Monitoraggio continuo della sicurezza di WordPress
La sicurezza non è un progetto una tantum. Vengono regolarmente scoperte nuove vulnerabilità e la configurazione del tuo sito può andare alla deriva nel tempo man mano che vengono aggiunti plugin o cambiano impostazioni.
- Installa un plugin di sicurezza: Wordfence, Sucuri o NinjaFirewall forniscono protezione in tempo reale, comprese regole firewall, scansione malware e sicurezza del login. Scegline uno (non multipli, perché possono confliggere) e configura gli avvisi.
- Imposta scansioni InspectWP automatiche: pianifica scansioni regolari per monitorare la tua postura di sicurezza nel tempo. InspectWP ti avvisa di nuovi problemi come intestazioni mancanti, debug log esposti o fughe del numero di versione non appena appaiono.
- Abilita le notifiche di aggiornamento: assicurati che WordPress ti invii notifiche email quando sono disponibili aggiornamenti core, plugin o tema. Le patch di sicurezza spesso devono essere applicate entro ore dal rilascio per stare al passo con gli exploit automatizzati.
- Rivedi regolarmente gli account utente: rimuovi gli account inattivi, specialmente quelli con ruoli di amministratore o editor. Esegui l'audit della tua lista utenti almeno mensilmente e revoca immediatamente l'accesso a chiunque non ne abbia più bisogno.
- Monitora i tuoi access log: controlla i log del tuo server per modelli insoliti, come richieste ripetute a
/wp-login.php,/xmlrpc.phpo percorsi che non esistono. Molti plugin di sicurezza forniscono una vista di log semplificata.
Verifica la sicurezza del tuo WordPress con InspectWP
Esegui una scansione InspectWP completa per controllare tutti gli elementi relativi alla sicurezza in una volta sola. La sezione di sicurezza copre la configurazione SSL, le intestazioni di sicurezza HTTP, l'esposizione della versione WordPress, l'enumerazione degli utenti REST API, l'accessibilità del debug log e altro ancora. Imposta scansioni automatiche per ricevere notifiche quando cambia la tua postura di sicurezza, in modo da poter affrontare nuovi problemi prima che vengano sfruttati.