La sicurezza di un blog dipende da molti fattori, perchè molte sono le variabili in gioco, prime tra tutte quelle messe in campo dal fatto che il blog risiede su un server Web ed ha bisogno di un database.
Fare in modo che questi due software siano in sicurezza è una questione che va oltre lo scopo di questo articolo, che presuppone che il vostro blog giri su un hosting condiviso. In questo caso infatti molte delle misure di sicurezza principali vengono messe in atto dal gestore dell'hosting.
In questo articolo possiamo invece esaminare alcuni strumenti, comportamenti e impostazioni da utilizzare per rendere più sicuri i nostri blog, anche con hosting condiviso.
Installazione
L'installazione WordPress prevede la possibilità di scegliere un prefisso per le tabelle del database.
Generalmente questa scelta viene fornita per poter installare più copie di WordPress sullo stesso database, ma è importante cambiare il nome delle tabelle anche per migliorare il livello di sicurezza: molti exploit che vengono utilizzati dai cracker infatti prevedono che le tabelle su cui si appoggia WordPress abbiano il nome di default.
È possibile cambiare i nomi delle tabelle anche dopo l'installazione, ma la procedura è abbastanza lunga e conviene usare un plugin come WP Prefix Table Changer. In questo caso è utile ricordare che prima di ogni modifica al blog è opportuno eseguire il backup completo di database e files.
Post-installazione
La procedura di setup di un blog prevede l'inserimento di informazioni che vengono poi inserite in un file, chiamato wp-config.php
, che risiede nella home del blog. Al suo interno troviamo questo spezzone di codice con alcune definizioni:
define('DB_NAME', 'wp'); // Il nome del database define('DB_USER', 'wpuser'); // il nome utente MySQL define('DB_PASSWORD', 'strongpassword'); // ...la password define('DB_HOST', 'localhost'); // il 99% delle volte non dovrete // -- Attenzione alla righe che seguono -- // define('DB_CHARSET', 'utf8'); define('DB_COLLATE', ''); define('SECREY_KEY','A49D0EA936EFFFE30BAD7BACBA466CC897636F74BAB91128A96C9EF8C25F0249');
Si tratta delle definizione legate alla configurazione del database, ci soffermiamo su queste perchè occorre eseguire un'operazione importante, ovvero la modifica del valore SECRET_KEY
.
Questo valore permette di impostare un nuovo livello di casualità per la creazione dei cookie. È importante inserire, al posto della stringa di default, un valore casuale, generato a mano oppure usando l'apposito tool fornito su WordPress.org.
Limitare l'uso dell'account amministratore
L'account amministratore dispone di ogni potere sul blog, è l'equivalente dell'utente 'root' nei sistemi UNIX (come Linux) o 'Administrator' su Windows. Premere il pulsante sbagliato per errore potrebbe compromettere la corretta visualizzazione del blog, per cui conviene creare un utente con pochi permessi per le normali operazioni di scrittura sul blog, ed usare l'utente 'admin' solo per operazioni di manutenzione.
Proteggersi usando .htaccess
Possiamo limitare l'accesso alle cartelle wp-content
e wp-includes
. Un file .htaccess
è un file speciale che permette di impostare delle direttive che vengono interpretate dal Web Server (Apache) per decidere chi può accedere alle risorse.
Inseriamo nelle cartelle wp-content
e wp-includes
un file di testo, chiamato appunto .htaccess
, che abbia all'interno il codice:
Order Allow,Deny Deny from all <Files ~ ".(css|jpe?g|png|gif|js)$"> Allow from all </Files>
Per quanto riguarda wp-admin
, la cartella di amministrazione, se avete a disposizione una connessione ad IP statico, sempre uguale, potete specificare una regola nel file .htaccess
che consenta l'accesso solo al vostro IP:
Order deny,allow Allow from a.b.c.d #i il vostro IP Statico
Altrimenti possiamo migliorare la sicurezza prevedendo l'uso di password HTTP.
Protezione con password HTTP
Non avendo a disposizione un IP statico, oppure se vogliamo connetterci da più location (ad esempio in viaggio), non è possibile limitare gli accessi all'amministrazione di WordPress basandoci sull'indirizzo. Possiamo comunque aggiungere un livello di sicurezza usando le password HTTP.
Inseriamo il seguente file .htaccess
nella root del web server, al di fuori dello spazio visibile agli utenti:
AuthUserFile /srv/www/user1/.htpasswd AuthType Basic AuthName "Blog" require user nomeUtente
Inserire al posto di nomeUtente
un nome di login scelto a caso, ed al posto del percorso il reale path che porta al file .htpasswd
che ora generiamo.
Il file .htpasswd
contiene la password per il nome utente sopra indicato. Viene creato via shell, con il comando
$ htpasswd -cm .htpasswd nomeUtente New password: Re-type new password: Adding password for user blog
È importante inserire questi due files in una cartella non visibile dall'esterno, ovvero se la home del vostro sito è nella cartella /server/utente/sito
, i files dovrebbero risiedere in /server/utente
, in modo che non siano accessibili via Web.
Se abbiamo eseguito le operazioni correttamente, all'atto di accedere all'interfaccia di amministrazione verrà visualizzata una form di inserimento dati, dove digiteremo login e password appena creati.
Usare un protocollo sicuro
Solitamente il login all'interfaccia di amministrazione viene eseguito usando il protocollo HTTP, in modo non protetto. In questo modo ogni volta che accedete al blog le password vengono inviate al server in chiaro, e potrebbero essere intercettate.
Per rimediare a questo problema si può utilizzare il protocollo HTTPS, sempre che abbiate un piano di hosting che lo prevede: spesso gli hosting forniscono HTTPS come servizio aggiuntivo, non compreso nei normali piani.
Per usare HTTPS è sufficiente digitare anzichè http://nomesito.com
l'indirizzo https://nomesito.com
.
Per fare in modo che ogni richiesta inoltrata al pannello di amministrazione usi HTTPS è possibile usare il plugin bs-wp-encrypt.
Se invece vogliamo un elevato grado di sicurezza anche per la visione del blog, possiamo usare il plugin Force SSL.
Rimuovere i messaggi inutili
WordPress è un CMS diffusissimo e per questo ogni versione ha dei problemi conosciuti e corretti nelle versioni successive. Se si conosce con esattezza il numero di versione di WordPress si può risalire ai problemi di sicurezza propri di quella release, può sfruttare il security hole per accedere al sistema senza autorizzazione.
Quindi è importante complicare la vita ai possibili attacker nascondendo il numero di versione che viene fornito di default da molti templates, nascosto nel codice HTML. Possiamo disabilitare questa opzione usando il plugin Replace
WP-Version.
Un'altro problema è rappresentato dagli errori: versioni di WordPress precedenti alla 2.3.2 visualizzano i messaggi di errore direttamente sul sito, e questo potrebbe rivelare informazioni compromettenti sul sistema.
Con le vecchie versioni di WordPress, è meglio disabilitare la visualizzazione dei messaggi di errore, usando il plugin bs-wp-noerrors.
Conclusioni
Non bisogna sottovalutare l'importanza degli aggiornamenti, infatti ogni versione di WordPress corregge problemi e bugs rilevati nella precedente release, per cui è molto importante effettuare un upgrade del software.
Mettendo in atto anche solo alcuni dei consigli forniti in questo articolo, aggiungiamo dei mattoni attorno alla nostra installazione di WordPress, che sarà così più difficile da penetrare. Un software sicuro al 100% non esiste, ma possiamo fare in modo che sia più difficile attaccare il nostro sito, scoraggiando i cracker che cercheranno una vittima più facile da bucare.