Hardening WordPress: come mettere davvero al sicuro il tuo sito

Quando si parla di sicurezza WordPress, molti pensano subito ai plugin: scanner, firewall, sistemi di login più avanzati, notifiche in tempo reale. Tutti strumenti utili, certo, ma spesso insufficienti se non accompagnati da una configurazione solida alla base. La verità è che la maggior parte delle vulnerabilità sfruttate dagli attaccanti non deriva da falle “misteriose”, ma da impostazioni trascurate, permessi errati, funzioni attive senza motivo o perfino scelte predefinite lasciate così come sono.

È qui che entra in gioco l’hardening: un insieme di accorgimenti tecnici che riduce drasticamente la superficie d’attacco del sito. Non si tratta di installare un plugin in più, ma di intervenire su file, directory, configurazioni del server e comportamenti predefiniti di WordPress, spesso ignorati da chi sviluppa o gestisce siti web.

In questo articolo vediamo quali sono le impostazioni di hardening più efficaci e meno conosciute: quelle che non troverai indicate nei classici tutorial “5 consigli per mettere al sicuro WordPress”, ma che fanno davvero la differenza quando si tratta di bloccare attacchi automatici, exploit comuni e tentativi di accesso non autorizzati. Molte richiedono pochi minuti per essere implementate, ma garantiscono benefici concreti e immediati, soprattutto se affiancate a un hosting configurato in modo sicuro fin dalla base.

Aggiornamenti e versioning: la base spesso ignorata

Prima di passare alle configurazioni avanzate, conviene partire da un punto tanto semplice quanto trascurato: gli aggiornamenti. Nonostante WordPress sia una delle piattaforme più bersagliate dagli attacchi automatici, molti siti continuano a utilizzare versioni obsolete del core, plugin non aggiornati da mesi e temi pieni di vulnerabilità note.

E il problema non è solo la mancanza di aggiornamenti: spesso vengono lasciate attive informazioni superflue che permettono agli attaccanti di capire esattamente quale versione del CMS stai usando, facilitando exploit mirati.

Disabilitare la visualizzazione della versione di WordPress

WordPress inserisce automaticamente nel codice sorgente del sito il tag <meta name="generator">, che indica la versione esatta del CMS in uso.
Una piccola informazione, ma sufficiente a rendere più semplice un attacco basato su vulnerabilità note.

Rimuoverlo è semplice e non ha controindicazioni: basta aggiungere una singola riga nel file functions.php del tema child o in un plugin dedicato agli snippet.

L’obiettivo non è “nascondersi” – non è mai possibile farlo del tutto – ma rendere meno immediato il lavoro di chi analizza il sito alla ricerca di punti deboli.

Forzare gli aggiornamenti automatici mirati

Gli aggiornamenti automatici di WordPress non vanno demonizzati: se configurati correttamente, sono uno dei modi più efficaci per ridurre il rischio di exploit.

Esistono tre livelli:

  • Core major
  • Core minor (sicurezza e manutenzione)
  • Plugin e temi

L’approccio consigliato è:

  • Core minor: sempre attivo (sono patch di sicurezza)
  • Plugin: attivi solo per quelli affidabili e mantenuti
  • Temi: attivi solo se non usi personalizzazioni importanti
  • Core major: valutare caso per caso, soprattutto su siti complessi o e-commerce

In altre parole, non serve attivare tutto in modo indiscriminato, ma nemmeno lasciare il sito fermo per mesi: un compromesso intelligente permette di migliorare la sicurezza senza rischiare rotture improvvise.

Limitare i punti di accesso al sito

Uno dei principi base della sicurezza è ridurre la superficie d’attacco. Su WordPress, questo significa rendere meno prevedibili e meno esposti i punti in cui un attaccante può provare ad entrare: pagina di login, area amministrativa, endpoint poco utilizzati ma ancora attivi. Non si tratta di “nascondere” il sito, ma di togliere facili opportunità agli attacchi automatici che scandagliano la rete alla ricerca di installazioni WordPress standard.

Con pochi accorgimenti mirati è possibile abbassare drasticamente il numero di tentativi di accesso non autorizzati, alleggerire i log e migliorare la sicurezza complessiva, senza stravolgere il flusso di lavoro di chi gestisce il sito.

Modificare l’URL di login senza plugin pesanti

Per impostazione predefinita, la pagina di login di WordPress è raggiungibile su percorsi facilmente indovinabili, come /wp-login.php o /wp-admin. Questo rende molto semplice per i bot automatizzati tentare attacchi a forza bruta o testare credenziali deboli.

Cambiare l’URL di login non è una soluzione definitiva (un attaccante determinato può comunque individuarlo), ma è un’ottima misura di hardening contro la massa di tentativi automatici che colpiscono ogni installazione WordPress esposta su Internet.

Invece di ricorrere a plugin pesanti che aggiungono molte funzioni non necessarie, è possibile:

  • utilizzare plugin leggeri dedicati esclusivamente al cambio URL di login;
  • implementare regole di rewrite a livello di server (Apache o NGINX) per mappare un percorso personalizzato verso il file di login;
  • mantenere il nuovo URL di login documentato solo internamente al team, evitando di linkarlo pubblicamente.

L’obiettivo non è creare “sicurezza per oscurità”, ma ridurre in modo significativo il rumore di fondo generato da bot e script automatici, rendendo più puliti anche i log di accesso.

Limitare i tentativi di login

Oltre a cambiare l’URL di accesso, è fondamentale limitare il numero di tentativi di login falliti provenienti dallo stesso IP o dallo stesso intervallo di indirizzi. Senza un sistema di rate limiting sulla pagina di login, un attaccante può provare migliaia di combinazioni di username e password nel giro di pochi minuti.

Un buon sistema di limitazione dovrebbe:

  • definire un numero massimo di tentativi falliti in un intervallo di tempo (ad esempio 5 tentativi in 15 minuti);
  • bloccare temporaneamente l’IP che supera la soglia, o imporre un tempo di attesa crescente;
  • registrare gli eventi sospetti in un log, così da poterli analizzare in un secondo momento;
  • escludere eventuali IP di amministrazione fidati, se gestisci il sito da una rete fissa o da una VPN aziendale.

Questa misura non impedisce in assoluto gli attacchi, ma li rende molto più lenti, costosi e facilmente individuabili, spingendo gli attaccanti automatici a “saltare” il tuo sito per passare a obiettivi meno protetti.

Proteggere l’area amministrativa con autenticazione a livello server

Un altro livello di hardening molto efficace consiste nell’aggiungere una protezione a livello di server sull’area amministrativa di WordPress, in particolare sulla directory /wp-admin. In pratica, prima ancora che WordPress venga eseguito, il server richiede un ulteriore livello di autenticazione.

Le opzioni più comuni sono:

  • Autenticazione HTTP (basic auth): richiede un nome utente e una password aggiuntivi prima di mostrare la pagina di login di WordPress. È semplice da configurare su Apache tramite file .htaccess o direttamente nella configurazione del virtual host.
  • Restrizione per IP o range di IP: consente l’accesso a /wp-admin solo da indirizzi IP specifici, ad esempio l’IP statico dell’ufficio o della VPN aziendale.

Queste misure hanno un grande vantaggio: operano prima che WordPress venga caricato, riducendo l’impatto delle richieste malevole sulle risorse del server. Inoltre, combinano bene con tutte le altre tecniche di hardening e non dipendono da plugin, quindi restano attive anche in caso di problemi applicativi.

Proteggere file e directory sensibili

Molti degli attacchi a WordPress non avvengono attraverso la pagina di login, ma sfruttando file sensibili, directory esposte o funzioni che non dovrebbero essere accessibili agli utenti non autenticati. Intervenire su queste aree è una delle forme di hardening più efficaci in assoluto, spesso ignorata da chi si affida soltanto ai plugin.

Con pochi accorgimenti mirati è possibile prevenire upload malevoli, impedire l’esecuzione di script indesiderati e limitare notevolmente ciò che un attaccante può fare anche nel caso in cui riesca a raggiungere cartelle interne del sito.

Disattivare l’editor dei file nel backend

WordPress include un editor integrato che permette di modificare temi e plugin direttamente dal pannello di amministrazione. Sebbene sia comodo per interventi veloci, rappresenta un rischio enorme: in caso di accesso non autorizzato, un attaccante potrebbe inserire codice maligno in pochi secondi.

Per fortuna, disattivarlo è semplice. È sufficiente aggiungere questa riga nel file wp-config.php:

define( 'DISALLOW_FILE_EDIT', true );

Una misura immediata che elimina un vettore di attacco molto comune e consigliata per qualsiasi sito in produzione.

Proteggere il file wp-config.php

Il file wp-config.php contiene dati estremamente sensibili: credenziali del database, chiavi di sicurezza, impostazioni core. Lasciarlo accessibile è una delle prime cose che un attaccante tenta di fare.

Due tecniche di hardening altamente consigliate:

  • Spostare wp-config.php: WordPress consente di collocarlo una directory sopra la root pubblica del sito, rendendo impossibile l’accesso da browser.
  • Bloccarne l’accesso via server: su Apache, ad esempio, basta aggiungere nella root:
    <files wp-config.php>
      order allow,deny
      deny from all
    </files>
    

Queste protezioni rendono molto più difficile accedere ai file critici anche in caso di configurazioni non perfette.

Bloccare l’enumerazione degli utenti

Un’altra tecnica di attacco molto diffusa consiste nel tentare di identificare gli username reali del sito, sfruttando URL come /?author=1 o endpoint della REST API. Una volta ottenuti gli username, i tentativi di brute force diventano molto più efficaci.

Per bloccare l’enumerazione puoi:

  • disabilitare la visualizzazione dell’author archive se non usato;
  • limitare l’accesso alla REST API agli utenti autenticati;
  • utilizzare regole di rewrite per impedire l’accesso ai pattern noti.

È un’accortezza semplice, ma che riduce drasticamente la quantità di informazioni esposte.

Disattivare il directory indexing

Il directory indexing consente a chiunque di vedere l’elenco dei file presenti in una cartella quando non è disponibile una pagina index. Questo può esporre file temporanei, backup dimenticati o script sensibili.

Per disattivarlo basta aggiungere questa direttiva nel file .htaccess:

Options -Indexes

Su NGINX, è possibile ottenere lo stesso risultato con:

autoindex off;

È una delle misure più immediate da implementare ed evita la visibilità accidentale di contenuti interni.

Rafforzare la comunicazione tra WordPress e il server

Oltre ai file locali, è fondamentale che le comunicazioni tra WordPress e il server avvengano in modo sicuro. Questo include l’utilizzo corretto di HTTPS, la protezione degli endpoint remoti e la disattivazione di funzioni non necessarie. Intervenire in questo punto significa impedire a terzi di intercettare, manipolare o sfruttare le connessioni del sito.

Utilizzare HTTPS in modo completo (HSTS incluso)

Avere un certificato SSL attivo non basta: occorre assicurarsi che tutte le richieste avvengano tramite HTTPS e che il server rifiuti le connessioni in HTTP.

Due configurazioni particolarmente efficaci:

  • Forzare HTTPS lato server: più sicuro rispetto ai plugin, evita redirect multipli e garantisce un comportamento coerente.
  • Abilitare HSTS: indica al browser di utilizzare sempre HTTPS per quel dominio, prevenendo attacchi come l’SSL stripping.

È una combinazione potente che rende la comunicazione molto più difficile da intercettare.

Disabilitare (o limitare) XML-RPC

XML-RPC è un sistema legacy utilizzato da alcuni servizi per interagire con WordPress dall’esterno. Tuttavia, è anche uno degli endpoint più sfruttati per attacchi di brute force massivi o pingback DDoS.

Le opzioni sono:

  • Disattivarlo completamente se non viene utilizzato da app, servizi esterni o Jetpack;
  • Limitare l’accesso solo a determinati IP;
  • Consentirlo solo per funzioni specifiche tramite plugin o configurazioni avanzate.

Se non ti serve, disabilitarlo è una delle misure di hardening più efficaci che puoi applicare.

Hardening su file system e permessi

Una configurazione sicura parte sempre dal file system. WordPress, come qualsiasi applicazione PHP, si basa su file che devono avere i permessi corretti per funzionare: se questi sono troppo permissivi, aprono la strada all’esecuzione di codice indesiderato, all’upload di malware o alla modifica non autorizzata di file critici. Mettere ordine in questa area è uno degli interventi più utili e spesso trascurati.

Impostare permessi corretti per file e directory

I permessi consigliati per WordPress sono:

  • File: 644
  • Cartelle: 755

Queste impostazioni garantiscono che i file siano leggibili dal server, ma non modificabili da utenti non autorizzati. In alcuni ambienti più restrittivi, è possibile usare 600/700 per file particolarmente sensibili, come wp-config.php, a seconda della configurazione del server.

È importante verificare anche la corretta proprietà dei file (owner e group), soprattutto nei server condivisi o in ambienti dove vengono usati tool automatizzati. Un file di proprietà errata può impedire aggiornamenti o, peggio, essere modificato da processi che non dovrebbero avere accesso.

Proteggere la cartella wp-content/uploads

La cartella /uploads è l’area più esposta di un sito WordPress, perché accetta file caricati dagli utenti e può contenere decine di migliaia di immagini o media. Per impostazione predefinita, WordPress non blocca l’esecuzione di file PHP all’interno di questa directory, e questo è un problema: molti malware si nascondono proprio qui.

Una delle tecniche più diffuse e efficaci è impedire l’esecuzione di script PHP:

Apache (.htaccess):

<Directory "/path/wp-content/uploads">
  php_flag engine off
</Directory>

NGINX:

location ~* /wp-content/uploads/.*\.php$ {
  deny all;
}

In questo modo, anche se un file PHP dovesse finire all’interno della directory (per errore o per un upload malevolo), non verrebbe mai eseguito.

Configurazioni DNS e server che aumentano la sicurezza

L’hardening di WordPress non riguarda solo il CMS: anche il dominio e il server giocano un ruolo fondamentale nella sicurezza complessiva del sito. Configurazioni corrette a livello DNS e server aiutano a filtrare traffico malevolo, impedire spoofing e garantire maggiore stabilità.

Attivare DNSSEC (già attivo di default su HostingPerTe)

DNSSEC protegge la risoluzione DNS garantendo che l’utente venga indirizzato al server corretto. Anche se molti provider non lo supportano o richiedono configurazioni manuali, su HostingPerTe DNSSEC è attivo automaticamente su tutti i domini, offrendo un livello di protezione aggiuntivo senza interventi da parte del cliente.

Utilizzare un firewall a livello server (come LiteSpeed ModSecurity)

Un firewall applicativo (WAF) analizza il traffico prima che arrivi a WordPress, bloccando exploit conosciuti, bot aggressivi e richieste sospette. A differenza dei plugin di sicurezza, il WAF opera prima che il CMS venga caricato, riducendo il consumo di risorse e migliorando la protezione complessiva.

Backup immutabili o off-site

Un aspetto spesso trascurato dell’hardening è proteggere il sito da se stesso nel caso di compromissione. Avere backup archiviati su server separati, o con versioni immutabili non modificabili dal sistema principale, garantisce un recovery affidabile anche in caso di attacco grave.

Impostazioni poco note ma estremamente efficaci

Ci sono misure di hardening che non richiedono plugin e che pochi conoscono, ma che possono aumentare sensibilmente la sicurezza del sito. Queste configurazioni intervengono sui protocolli HTTP, sulle intestazioni di sicurezza e sui comportamenti del server.

Aggiungere security headers

Gli header di sicurezza permettono di controllare come il browser interpreta le risorse del sito, prevenendo molti attacchi basati su script, iframe o contenuti non autorizzati. I principali sono:

  • Content-Security-Policy (CSP): limita le fonti da cui possono essere caricati script e risorse, prevenendo attacchi XSS.
  • X-Frame-Options: impedisce che il sito venga caricato in iframe esterni (protezione anti-clickjacking).
  • Referrer-Policy: controlla quali informazioni vengono inviate come referrer.
  • Strict-Transport-Security (HSTS): obbliga il browser a usare sempre HTTPS.

Questi header possono essere configurati a livello server o tramite plugin leggeri dedicati.

Disattivare l’esecuzione di PHP in cartelle sensibili

Oltre alla cartella uploads, è utile impedire l’esecuzione di PHP anche in directory come wp-includes e wp-content. Questo blocca una vasta gamma di attacchi basati sull’upload o sull’iniezione di file malevoli.

Rate limiting a livello server

Il rate limiting controlla quante richieste un singolo utente o IP può effettuare in un dato intervallo di tempo. Implementato a livello server, è molto più efficace rispetto ai plugin, perché riduce il carico sul sito ed evita attacchi di tipo brute force e scraping aggressivo.

Checklist finale di hardening WordPress

Una sintesi delle impostazioni più importanti da implementare subito:

  • Disattivare l’editor dei file nel backend
  • Proteggere wp-config.php
  • Bloccare l’enumerazione degli utenti
  • Limitare i tentativi di login
  • Cambiare l’URL di login
  • Impostare permessi corretti su file e cartelle
  • Bloccare esecuzione di PHP in uploads
  • Forzare HTTPS + HSTS
  • Limitare o disattivare XML-RPC
  • Abilitare security headers
  • Utilizzare un firewall applicativo
  • Mantenere plugin, temi e core aggiornati

Conclusioni

L’hardening di WordPress non è una procedura unica o un plugin miracoloso: è un insieme di buone pratiche tecniche che riducono drasticamente la superficie d’attacco del sito. Molte delle impostazioni che abbiamo visto richiedono pochi minuti per essere applicate, ma possono prevenire problemi seri come infezioni da malware, accessi non autorizzati o compromissioni del sito.

Con un hosting configurato in modo sicuro fin dalla base, come quello di HostingPerTe, e con misure di hardening applicate correttamente, WordPress può diventare una piattaforma molto più solida e resistente agli attacchi.

Implementare anche solo metà dei punti sopra elencati porta già a un enorme miglioramento della sicurezza complessiva del sito, riducendo rischi, costi di intervento e tempi di ripristino in caso di incidente. Il momento migliore per iniziare con l’hardening è adesso.

Back to list