Check List – Come proteggere WordPress

Una check-list per principianti per aumentare il livello di sicurezza di un blog/sito in WordPress e proteggerlo dagli attacchi più diffusi.

La sicurezza di un sito web è un aspetto che non dovrebbe mai essere sottovalutato, sia che si tratti di un sito professionale che di un sito amatoriale. Il mio primo consiglio è sempre quello di rivolgersi ad un professionista: spesso anche poche centinaia di Euro sono sufficienti per ottenere un livello di sicurezza “base” compatibile con il proprio livello di esposizione e che garantisca perlomeno una protezione dagli attacchi più comuni.

E se non ho un budget da dedicare alla sicurezza del mio sito in WordPress?

Se non hai alcun budget per ottenere una comoda e veloce consulenza di un professionista, ma vuoi comunque mettere in sicurezza il tuo sito/blog in WordPress, allora questa chek-list ti sarà molto d’aiuto.

La maggior parte delle soluzioni che trovi in questo tutorial sono attuabili da un qualsiasi principiante o comunque “non” addetto ai lavori.

Altre invece necessitano di un po’ di dimestichezza con il codice; tuttavia con un po’ di impegno e buona volontà puoi riuscire ad applicarle alla tua installazione di WordPress e raggiungere un buon livello di sicurezza senza alcuna consulenza ed evitando l’uso di plugin molto pesanti per le risorse del server.

Perché è necessario alzare il livello di sicurezza base di WordPress?

Il motivo è piuttosto semplice, ma per comprenderlo, e non cadere nel solito luogo comune secondo cui “WordPress non è sicuro”, è necessario dare uno sguardo ad alcuni numeri e provare a vedere le cose dal punto di vista di un hacker.

Al momento, secondo le ultime statistiche, circa 75 milioni di siti in rete sono stati realizzati con WordPress. Questo significa che circa il 30% di tutti i siti della rete sono targati “WordPress”. Se riduciamo l’insieme dei siti ai soli che utilizzano un CMS, WordPress prevale con la percentuale spaventosa del 75%.

È ovvio quindi che il motivo per cui WordPress riceve così tante attenzioni dagli hacker è la sua diffusione. Gli hacker devono ottimizzare il lavoro e per questo puntano i loro bot su strumenti con grandi percentuali di utilizzo e diffusione.

Qual è il livello di sicurezza più adatto al tuo sito?

Come avrai notato ho sempre parlato di “livelli” di sicurezza. C’è un motivo. Il sito sicuro al 100% non esiste. Nessuno. Esistono “livelli” di sicurezza e, scegliere come obiettivo quello che è più indicato per il proprio sito, tenendo conto di budget, competenze, tempo e buona volontà, è la prima buona pratica da imparare.

Devi scegliere come obiettivo il giusto livello di sicurezza adeguato alle tue risorse e al valore di ciò che vuoi proteggere.

È corretto parlare di livelli di sicurezza perché esistono “livelli di attacchi”, e non dobbiamo essere così vanitosi da pensare che il nostro piccolo blog, con una decina di articoli, 3 utenti e poche centinaia di visite al mese abbia la necessità di difendersi da un attacco super sofisticato. In questi casi il nostro sito, agli hacker o agli attacchi di alto livello, semplicemente non interessa.

Cosa rende un sito appetibile agli hacker?

Quali fattori puoi prendere in considerazione per capire quanto un sito sia esposto ad eventuali attacchi e di quale livello?

  • Il numero di utenti iscritti al sito e/o dati associati.
  • Il numero di pagine del sito.
  • Il numero di visite.
  • Il posizionamento nelle SERP.
  • La celebrità/notorietà del sito o dell’azienda/proprietario/professionista.

La sicurezza comincia moooolto prima di WordPress!

Prima di vedere nel dettaglio la check-list è opportuno che io ti dica che la sicurezza di un sito realizzato con WordPress non dipende solo da WordPress. Se blindi WordPress, ma non tieni in considerazione “tutti” i fattori che contribuisco a mettere in sicurezza il tuo sito, non raggiungerai mai livelli di sicurezza sufficienti per dormire sogni tranquilli.

Ecco alcuni esempi:

  • La sicurezza del tuo dispositivo. Se il tuo dispositivo (quello che utilizzi per loggarti al sito o caricarci dei file) è un concentrato di virus di ogni genere continuerai a portarti dietro un rischio sempre elevato.
  • La sicurezza del server. Idem con patate.
  • La sicurezza della connessione che utilizzi per connetterti al sito con il tuo dispositivo.
  • Dove tieni le tue password? Lo so. Sui post-it appiccicati al monitor del tuo ufficio o, peggio ancora, in un file che hai nominato “password” e che hai nascosto (si fa per dire) in qualche cartella, oppure in qualche nota sul tuo smartphone! Indovinato?

La legge di Pareto: ecco cosa puoi fare per proteggerti dall’80% degli attacchi più comuni.

Se non hai un budget da investire per la sicurezza del tuo sito e, in generale, non sei un addetto ai lavori, c’è una buona notizia. Esiste un 20% di cose che puoi fare per ottenere l’80% del risultato. Vale a dire che quel 20% di cose, in questo caso, ti protegge da attacchi di livello medio-basso, ma che rappresentano circa l’80% degli attacchi più comuni.

In questo 20% di cose ci sono:

  • Alcune scelte
  • Alcune buone abitudini
  • Roba per smanettoni

Le buone abitudini e la roba per smanettoni le trovi nella check-list. Le scelte importanti invece te le elenco qui sotto:

  • La scelta dell’hosting
  • La scelta del tema
  • La scelta dei plugin

La scelta dell’hosting

La scelta dell’hosting è una di quelle scelte che devi fare con la dovuta calma, leggendo, valutando e approfondendo tutte le informazioni che trovi in rete. Non esiste il miglior hosting in assoluto, esiste l’hosting più indicato al tuo progetto e alle tue competenze.

Tra le varie caratteristiche che deve avere un buon servizio di hosting c’è anche quella relativa alla sicurezza. Purtroppo questa caratteristica è spesso “invisibile” agli occhi di un utente inesperto, che, solitamente, sceglie l’hosting più economico pensando di aver fatto un affare.

La scelta del tema

Anche la scelta del tema del tuo sito, come la scelta dell’hosting, può incidere sulla vulnerabilità della tua installazione. Solitamente la scelta del tema è basata principalmente su aspetti estetici, ma se vogliamo considerare anche il fattore “sicurezza” dobbiamo inevitabilmente fare attenzione anche ad altri aspetti.

Potremmo porci, per esempio, delle domande. Chi ha realizzato il tema? È una azienda? È un privato? Ne ha realizzati altri? Lo tiene costantemente aggiornato? Quanti download può vantare? Offre un servizio di assistenza? Risponde puntualmente alle domande? Cosa dicono in rete di quel tema o di quella azienda/sviluppatore? Gratis o a pagamento?

Purtroppo, questi, non possono essere considerati indici di affidabilità. Esistono temi gratuiti fatti bene e sicuri così come esistono temi a pagamento fatti male e per niente sicuri. Per questo è necessario valutare l’insieme delle informazioni che abbiamo a disposizione.

L’unica cosa che mi sento di consigliarti è di non utilizzare temi craccati (sì, purtroppo esiste anche questo) e di non scaricare temi gratuiti da siti non affidabili. Se sei curioso di sapere quali sono i temi che uso io li puoi trovare qui.

La scelta dei plugin

Per la scelta dei plugin, in generale, valgono gli stessi consigli che ti ho esposto per la scelta del tema.

Importante! Leggi attentamente il paragrafo seguente prima di smanettare con la check-list.

  1. Le voci della check-list non devono essere considerate come “tutte” da applicare. In alcuni casi, alcune ne escludono altre.
  2. Non applicare le voci della check-list direttamente sul tuo sito in produzione. Alcune voci, per poter essere applicate a siti già pubblicati, necessitano di altro lavoro che non è stato inserito in questa check-list.
  3. Utilizza la check-list come punto di partenza per studiare, approfondire e sperimentare su siti di prova prima di applicarla sul tuo sito web.

Di seguito, la check-list per la sicurezza della tua installazione WordPress

La mia Check-list per un livello base di sicurezza per WordPress

#1 Assicurarsi di avere sempre un backup

Tutte le voci della check-list successive a questa ti aiuteranno a ridurre le probabilità di ritrovarti con il sito hackerato. Ma è una possibilità che comunque va messa in conto, e farti trovare preparato ti farà risparmiare soldi, tempo e stress.

L’unico modo che hai per farti trovare preparato è quello di avere un backup del tuo sito. Qualsiasi cosa sia successa, grazie al backup potrai tornare all’ultima versione funzionante o non hackerata.

Il backup del sito infatti non ti sarà di grande aiuto solo nel caso in cui il tuo sito venga hackerato, ma anche nel caso in cui, per un motivo qualsiasi, dovesse smettere di funzionare correttamemte.

Come fare un backup del sito?

Quando parliamo di backup di una installazione di WordPress in realtà parliamo di due backup: il backup dei file ed il backup del database. Sostanzialmente ci sono tre metodi per gestire questi backup:

  • Manualmente
  • Affidarli ai plugin
  • Affidarli all’hosting

Tutti i metodi elencati hanno vantaggi e svantaggi. Occuparsi del backup manualmente, per esempio, ti permette di ridurre il numero dei plugin installati e di avere piena autonomia, ma ti espone anche ad alcuni rischi.

Il più rilevante, nel mio caso, sarebbe un rischio del tipo “lo faccio domani” che di solito significa “lo faccio la settimana prossima” che potrebbe anche voler dire “il mese prossimo”. Puntualmente, quando ti serve, ti accorgi che l’ultimo backup è di tre mesi fa e che se utilizzi quello perderai gli ultimi tre mesi di lavoro sul sito.

#2 Aggiornamenti

Tenere l’installazione di WordPress sempre aggiornata è una buona pratica che non dovresti mai mettere in discussione. Non aggiornare WordPress e ritrovarsi con una versione obsoleta, non solo ti espone  facilmente al rischio di attacchi mirati ad una vulnerabilità conosciuta, ma ti impedisce anche di usufruire di tutti i miglioramenti, così come di nuove funzionalità, che vengono introdotti costantemente dalla community di WordPress.

Se leggi attentamente il report di sucuri.net del 2017, per esempio, puoi notare come durante il 3° trimestre del 2016 il 61% di siti WordPress hackerati riguardava installazioni obsolete.

Gli aggiornamenti non riguardano solo WordPress, ma anche i temi ed i plugin. Più che consigliare di aggiornare sempre tutto, in realtà, dovrei consigliare di utilizzare le buone pratiche che permettono di aggiornare sempre il nostro sito senza perdere le nostre personalizzazioni.

Ecco le tre regole fondamentali:

  • Mai modificare il core di WordPress.
  • Mai modificare i file del tema. La prassi corretta è quella di creare un child theme che sarà oggetto delle nostre personalizzazioni, ma che ci permetterà di continuare ad aggiornare il tema genitore in tutta tranquillità.
  • Mai modificare i file dei plugin.

#3 Eliminare tutto ciò che non è utilizzato

Può accadere che il tuo sito venga hackerato attraverso temi e plugin che non sono attivi sulla tua installazione ma che hai lasciato lì a disposizione degli hacker. Il mio consiglio è quello di lasciare solo ed esclusivamente il tema in uso così come i plugin attivi ed eliminare tutto il resto.

#4 Non usare il sito principale come cavia

Se stai scegliendo il tema per il tuo nuovo sito, ma anche se stai cercando un nuovo tema per il tuo sito attuale, sarebbe bene che tu provassi tutti questi template su una installazione di prova, magari in locale e non in remoto sul server che ospita o ospiterà il tuo sito. Stessa cosa vale per i plugin.

#5 Utilizzare un certificato SSL

Ormai diversi hosting offrono come servizio gratuito l’installazione di strumenti come Let’s Encrypt, un certificato SSL gratuito che, per siti che non hanno grandi necessità, va più che bene.

L’installazione di un certificato SSL porterà diversi vantaggi e non solo dal punto di vista della sicurezza. Oltre a criptare le comunicazioni tra i browser (Safari, Chrome, Firefox…) ed il server su cui si trova il tuo sito web, sembra sia anche un fattore che google tiene in considerazione per il suo page rank.

#6 Forzare la connessione HTTPS

Quando attivi un certificato SSL, il tuo sito è raggiungibile all’indirizzo (esempio) https://www.iltuosito.it. Molto probabilmente però sarà ancora raggiungibile attraverso l’indirizzo http://www.iltuosito.it. È possibile forzare la connessione sicura e fare in modo che, anche quando viene digitato nella barra degli indirizzi del browser l’indirizzo non sicuro, venga effettuato un redirect automatico verso l’indirizzo https://www.iltuosito.it (quello sicuro).

Questo si può fare in vari modi. Se il tuo servizio di hosting lo prevede, puoi attivare questa funzione direttamente dal pannello di controllo del tuo server. Un altro modo per forzare la connessione SSL è quello di utilizzare un plugin. Anche per questo scopo trovi numerosi plugin gratuiti sul reposotory di WordPress. Un altro modo è quello di specificarlo nel file config.php di WordPress. Un altro modo ancora è quello di inserire il codice riportato qui sotto nel file htaccess della tua installazione.


RewtiteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.ilmiosito.it/$1 [R=301,L]

#7 Utilizzare una connessione SFTP o SSH

La normale connessione ftp che si utilizza per il trasferimento dei file dal proprio dispositivo al server è una connessione ad altissimo rischio.

Tutto ciò che viene trasferito con questa tipologia di connessione viaggia “in chiaro”. Cioè è visibile a chiunque riesca ad intercettare questi file, ad esempio utilizzando una tecnica che si chiama “Man in the middle”.

Per aumentare il livello di sicurezza relativo ai trasferimenti di file tra dispositivo e server puoi optare per un altro tipo di connessione: quella sftp con protocollo SSH.

Questa tipologia di connessione permette la totale cifratura di tutto ciò che viene trasferito, compresi i comandi, e utilizza un sistema di chiavi pubbliche e private che è davvero difficile da decifrare rispetto alla normale connessione ftp per la quale intercettare “username” e “password”, al contrario, risulta una operazione molto facile.

#8 Utilizzare le security Key

Assicurati che nel file wp-config.php siano impostate le chiavi di sicurezza. Queste chiavi sono molto importanti perché si occupano di cifrare i dati degli utenti di WordPress che vengono salvati nei cookie.

#9 Modificare il prefisso delle tabelle del database

Quando installi WordPress, sia che tu lo faccia utilizzando la procedura manuale, sia utilizzando dei tool forniti dall’hosting (come ad esempio Softaculous) è importantissimo personalizzare il prefisso delle tabelle del database.

Di default WordPress utilizza il prefisso wp_, è necessario personalizzarlo con qualsiasi altra cosa casuale come ad esempio a569ut_.

#10 Utilizza password lunghe e complicate

La scelta delle password spesso si traduce in un autogoal clamoroso. Se scelgi password di 4 o 6 cifre, sappi che un normalissimo attacco che utilizza una classica libreria di password riesce a trovarla nel giro di 2/3 ore. Password invece di 8 o 10 o 12 cifre hanno bisogno di giorni o mesi per poter essere trovate.

Oltre ad essere “lunghe”, è importante che siano una sequenza alfanumerica di caratteri “casuali”. Questo eviterà di avere la password nelle classiche librerie che vengono utilizzate dagli hacker e che contengono quelle più frequenti. Una buona password, ad esempio, è: Wg5TiD%za$12.

Se utilizzi password del tipo: Luigi82, ronaldo2018starwarsbatmanmatrix79, devi sapere che queste non sono password.

Ricordati di evitare sempre password che sono legate in qualche modo a tutto ciò che può essere oggetto di una azione di ingegneria sociale. Vale a dire niente nomi di figlimogli o maritianni di nascita o combinazione di questi. Nomi di animali domestici, di personaggi di libri preferiti, o di attori o scrittori preferiti, oppure titoli o versi di canzoni e altre cose del genere.

Ad ogni modo trovare le password di un account è sempre e solo una questione di tempo, per questo scegliere una password lunga e complicata è molto importante.

#11 Eliminare l’utente con il ruolo di amministratore e ID=1

Una delle prime operazioni che ti consiglio di fare appena conclusa l’installazione di WordPress è quella di eliminare l’utente con ID=1. Per fare questo devi creare subito un nuovo utente a cui assegnare il ruolo di “Amministratore”, fare il login con le nuove credenziali e poi eliminare il primo utente.

#12 Creare un utente con il ruolo di autore per la pubblicazione degli articoli

Questo è un errore che fanno ancora in tanti. Quale? Quello di pubblicare gli articoli utilizzando come autore l’utente con il ruolo di “Amministratore”. È buona regola fare in modo che l’amministratore non abbia mai articoli o pagine pubblicate.

Per questo motivo è opportuno creare un altro utente a cui assegnare il ruolo di “Autore” ed utilizzare questo come autore degli articoli o delle pagine.

#13 Modificare il nome pubblico da visualizzare

Un altro accorgimento che possiamo prendere in considerazione è quello di modificare il nome pubblico da visualizzare, sia dell’utente con il ruolo di Amministratore sia dell’utente con il ruolo di Autore. Per fare questo è sufficiente completare i campi NomeCognome e Nickname dei due profili e scegliere come nome pubblico da visualizzare qualsiasi cosa “diversa” dal nome utente.

#14 Elimiare il nome utente dai permalink

Quando WordPress crea un utente crea anche un permalink relativo all’archivio di quell’utente. Solitamente il permalink ha una struttura di questo tipo: www.iltuosito.it/author/nomeutente. Anche se hai modificato il nome pubblico da visualizzare nell’articolo, il permalink continuerà a visualizzare il nome utente. Il nome utente, insieme alla password, sono ciò che è necessario ad un bot o ad un hacker per accedere al backend della tua installazione, per questo devi sempre cercare di renderli “invisibili”.

Per rimuovere il nome utente dai permalink è necessario accedere al database della tua installazione di WordPress con gli strumenti messi a disposizione dal tuo hosting e modificare la voce user_nicename di ogni utente.

#15 Disabilitare l’archivio autore

Se si tratta di un blog mono-autore potresti anche pensare di disabilitare l’archivio autore. Questo perché l’archivio autore coinciderà con l’archivio della pagina blog. Probabilmente potresti avere anche dei vantaggi dal punto di vista della SEO in quanto eviti di creare un intero archivio duplicato.

#16 Impedire l’enumerazione degli ID degli utenti

Su una qualsiasi installazione di WordPress, se si digita ?author=1 oppure ?author=2 di seguito all’indirizzo del sito, come ad esempio https:www.ilmiosito.it/?author=1, WordPress esegue una redirect automatica all’archivio utente con quell’ ID. Questo è un problema se abbiamo settato i perlmalink scegliendo la visualizzazione del tipo “postname” e non abbiamo rimosso il “nome utente” dai permalink come ho spiegato nel punto #14. Per evitare a priori che i malintezionati (ma anche i bot) utilizzino l’enumerazione degli ID per ottenere il nome utentesi può, ad esempio, inserire il codice seguente all’interno del file .htaccess e forzare la visualizzazione della home page del sito ad ogni tentativo.

<IfModule mod_rewrite.c>
RewriteCond % {QUERY_STRING} ^author=([0-9]*)
RewriteRule .* https://www.ilmiosito.it/? [L,R=301]
</IfModule>

#17 Impostare una password per la directory wp-admin

Questa è una operazione semplicissima che puoi fare direttamente dal file manager fornito dal tuo hosting. Nel mio, ad esempio, è sufficiente cliccare con il tasto destro sulla cartella e scegliere la voce “aggiungi password”.

#18 Spostare o nascondere la pagina wp-login.php e la directory wp-admin

Tutte le installazioni WordPress hanno la pagina di login allo stesso indirizzo e cioè www.ilmiosito.it/wp-login.php oppure all’indirizzo www.ilmiosito.it/wp-admin.

Vista l’importanza di questa modifica io sconsiglio assolutamente ad un principiante di provare a smanettare per farlo sul proprio sito. In questo caso è meglio affidarsi ad un plugin tra quelli che si ottengono sul repository di WordPress con la chiave di ricerca “hide login”.

Non scegliete mai plugin che fanno decine e decine di cose. Il miglior plugin è sempre quello che fa una sola cosa, e basta. Il plugin che ho scelto io, ad esempio, mi permette di personalizzare la pagina di login e di rendere inaccessibile l’indirizzo /wp-admin, stop.

#19 Limitare il numero di tentativi di accesso

Limitare il numero di tentativi di accesso è una buona pratica che comporta due vantaggi concreti:

  1. Bloccando l’accesso per un tempo stabilito (minuti, ore o anche giorni) dopo 3/4 tentativi si ha il tempo di accorgersi di quali siano gli indirizzi IP da inserire nella lista nera e bloccarli definitivamente.
  2. Si impedisce ai bot di occupare inutilmente le risorse del server facendo risultare la navigazione lenta agli utenti.

Anche per questo consiglio di utilizzare uno dei tanti plugin che si trovano gratuitamente nel repository di WordPress.

#20 Permettere il login solo ad 1 indirizzo IP

Una delle soluzioni più efficaci che si possono utilizzare per limitare i tentativi di accesso alla pagina di login è quella di dare il permesso solo ed esclusivamente ad un solo indirizzo IP.

Un modo per farlo è quello di inserire nel file .htaccess le istruzioni seguenti:

<Files wp-login.php>
order deny, allow
Deny from all
Allow from XX.XXX.XXX.XXX
</Files>

Ovviamente se hai modificato la pagina di login dovrai sostituire “wp-login.php” con quella corretta.

Questa soluzione comporta qualche impiccio. Ad esempio se hai un indirizzo IP dinamico dovrai ogni volta accedere prima al file .htaccess dall’hosting ed inserire l’indirizzo IP corrente prima di poter eseguire l’accesso.

#21 Spostare il file wp-config.php

Il file wp-config.php è uno dei file a cui devi prestare la massima attenzione (oltre al file .htaccess, al file xmlrpc.php ed altri che vedrai più avanti). Solo per questo file vale la soluzione più semplice, vale a dire che puoi prenderlo e trascinarlo nella directory subito sopra a quella di WordPress.

Per proteggere il file wp-config.php puoi utilizzare anche la soluzione #26 della check-list.

#22 Rinominare la directory wp-content

define ('WP_CONTENT_FOLDERNAME', 'pippo');
define ('WP_CONTENT_DIR', ABSPATH . WP_CONTENT_FOLDERNAME); define ('WP_SITEURL', ‘http://miosito.it/');
define ('WP_CONTENT_URL', WP_SITEURL . WP_CONTENT_FOLDERNAME);

#23 Rinominare la directory uploads

Se ad esempio rinomini la cartella “uploads” chiamandola “paperino” potresti inserire quesa riga di codice nel file wp-config.php

define( ’UPLOADS’, ’wp-content/paperino’ );

#24 Abilitare solo alcuni formati di file per l’upload

Alcune tipologie di attacchi prevedono l’upload di file .php.html ma anche di testo. Con le istruzioni seguenti inserite nel file .htaccess puoi limitare l’upload solo ad alcune estensioni specifiche di file.

<Files “\.(jpg|jpeg|pdf|png|gif)$”>
Allow from all
<\Files>

#25 Spostare la directory dei plugin

Spesso abbiamo assistito ad attacchi che sono partiti da vulnerabilità conosciute di alcuni plugin. Oltre ad eliminare i plugin non utilizzati puoi anche rinominare o spostare la cartella dei plugin di WordPress.

define( ’WP_PLUGIN_DIR’, dirname(__FILE__).’/wp-content/nuovacartella/plugins’ );
define( ’WP_PLUGIN_URL’, ’http://miosito.it/wp-content/nuovacartella/plugins’ );

Se hai spostato o rinominato la cartella “wp-content” ovviamente devi tenerne conto in queste righe di codice che vanno sempre inserite nel file wp-config.php.

#26 Impedire l’accesso ad alcuni file

Nell’esempio qui sotto puoi vedere come impedire l’accesso al file xmlrpc.php inserendo queste istruzioni nel file .htaccess della tua installazione. Le stesse possono essere utilizzate per impedire l’accesso ad altri file come ad esempio:

  • wp-config.php
  • license.txt
  • readme.html
<Files xmlrpc.html>
Order Allow, Deny
Deny from all
</Files>

Ricorda che se utilizzi il plugin JetPack non puoi bloccare l’accesso al file xmlrpc.php perché altrimenti non funzionerebbe. Puoi liberarlo tranquillamente in quanto sarà lo stesso JetPack a preoccuparsi di proteggerlo.

Giuliano Growler

Approfondimentihttps://codex.wordpress.org/Hardening_WordPress