Quando un sito web viene hackerato è quasi sempre responsabilità del sito (e quindi del webmaster). E’ meno frequente che la colpa sia dell’infrastruttura su cui il sito risiede. Una lettura interessante è questa: Website Security: How Do Websites Get Hacked?

Qui trovate ben 30 consigli per rendere il vostro sito WordPress a prova di hacker!

1. L’ABC: prepariamoci

1.1 Computer privi di virus e malware

Se il tuo computer è infetto da virus o da software malware, un potenziale aggressore potrebbe recuperare le credenziali di accesso al vostro sito bypassando tutte le misure di sicurezza previste sul web server. In pratica ognuno dei consigli qui riportati diventa inutile!

Per questo motivo è molto importante avere un programma antivirus aggiornato e mantenere la sicurezza generale di tutti i computer che si utilizzano per accedere al sito WordPress con un account di amministrazione.

1.2 Password forti

Impostate sempre password che siano forti (cioè più sicure e più difficili da trovare): oltre 12 caratteri alfanumerici e simboli, senza parole presenti nel vocabolario (in qualsiasi lingua). Esistono molti metodi per generare password sicure (ad esempio generate-password.com) e soprattutto per non dimenticarle (applicazioni come KeePass o 1Password).

1.3 Vulnerabilità della rete

La rete su entrambe le estremità – lato server WordPress e il lato client – deve essere “fidata”: necessario stare tranquilli si cosa vi ci transita. Ciò significa, ad esempio, che l’aggiornamento delle regole del firewall sul vostro router di casa deve essere una priorità.

Il problema della rete sicura diventa ancora più grave se, ad esempio, decidete di lavorare da un internet café, dove si inviano le password su una connessione non cifrata e wireless.

Quando ci si connette al server sarebbe opportuno utilizzare la crittografia SFTP (chiedete al vostro fornitore di hosting). Utilizzare SFTP è come utilizzare FTP, tranne per il fatto che la password (e altri dati) vengono cifrati durante la trasmissione. Questo significa che la password non viene mai inviata in chiaro e non può essere intercettata da un utente malintenzionato.

Adottate queste cautele soprattutto se avete l’abitudine di accedere all’area amministrativa di WP da connessioni pubbliche.

Valutate di mettere il vostro sito dietro HTTPS (vedi dopo).

1.4 Hosting sicuro

Usare WordPress in Locale

Usare WordPress in Locale

Non tutti i provider di web hosting sono uguali: quando si sceglie un fornitore per far ospitare il proprio sito web non si deve semplicemente rivolgersi al più economico. Fate la vostra ricerca, e assicuratevi di utilizzare una società consolidata (e ben nota) con una evidente propensione alle misure di sicurezza.

Vale sempre la pena pagare un piccolo extra per la serenità che si ottiene dal sapere che il vostro sito è in mani sicure. Ma diffidate da chi vi propone sistemi di sicurezza opzionali ed a pagamento: è sufficiente che uno dei siti ospitati dal web provider sia vulnerabile, che tutti i siti diventino automaticamente a rischio.

Se siete su un server condiviso (cioè che ospita altri siti oltre il proprio) e un sito web sullo stesso server viene compromesso, il vostro sito web può potenzialmente essere stato compresso anche se voi avete adottato tutte le accortezze del caso.

l server web, e il software che gira su di esso, possono avere vulnerabilità note e non note. Pertanto è necessario assicurarsi che si stiano eseguendo versioni stabili e sicure di tutto il software coinvolto: dal S.O. alle applicazione di logging. Se qualcuno, per esempio, può sfruttare una vulnerabilità in una vecchia versione di PHP, avere l’ultima versione di WordPress diventa inutile.

Questo è il motivo per cui è importante essere ospitati da una azienda che fa della sicurezza una priorità. Alcune delle caratteristiche che si dovrebbe cercare sono:

  • Il supporto per le ultime versioni di MySQL PHP
  • L’isolamento dell’account
  • Un adeguato Web Application Firewall
  • Sistemi di rilevamento delle intrusioni

1.5 Backup

Dovrebbe stare al primo posto di questo elenco. Regola 3-2-1: tre regolari e complete copie di backup, salvate su 2 tipologie di supporti differenti, di cui una conservata in un posto lontano dalle altre. Leggete dopo per qualche strumento.


 

2. Installiamo WP

2.1 Permessi di files e cartelle WP

Wordpress. La guida completa. Creare blog e siti professionali

WordPress. La guida completa. Creare blog e siti professionali

Se non si utilizza un web-host gestito, è importante assicurarsi che i file e le cartelle di WordPress abbiano le proprietà e le autorizzazioni corrette. Non solo questo permetterà a WordPress di effettuare gli aggiornamenti in automatico, ma impedirà che eventuali aggressori sfruttino alcuni exploit legati a files con scarsa sicurezza per prendere il controllo del vostro sito.

Quando si ricevono errori tentando di installare un plugin o tentando di caricare i nuovi media, si è tentati di impostare tutte le autorizzazioni per le cartelle a 0777.

Le cartelle di WordPress dovrebbero sempre avere permessi 0755; mentre i files di WordPress dovrebbero sempre avere permessi 0644 (anche se questo potrebbe variare da hosting ad hosting). Inoltre è necessario assicurarsi che PHO venga eseguito con l’utente corretto, e che le cartelle siano tutte di proprietà dello stesso utente.

Se si ha accesso alla shell, è possibile eseguire alcuni comandi per garantire la sicurezza di WordPress eseguendo:

find /path/to/your/wordpress/install/ -type d -exec chmod 755 {} \; find /path/to/your/wordpress/install/ -type f -exec chmod 644 {} \;

Se si conoscessero l’utente ed gruppo necessario si potrebbe anche usare:

sudo chown -R username:group /path/to/your/wordpress/install

2.2 Files WP inutili

WordPress ha alcuni file che forniscono informazioni circa la sua versione: si tratta di una informazione utile ad eventuali malintenzionati che vogliano violare il nostro sito. Conoscere la versione di WP equivale a conoscere le vulnerabilità specifiche di quella versione.

Meglio quindi rimuovere dalla cartella root di WordPress i seguenti files: LEGGIMI.txtlicense.txtlicenza.html e readme.html.

Eliminate inoltre tutti i plugin o temi non si stanno usando: ridurrete la probabilità di essere violati per eventuali vulnerabilità di questi elementi. Ricordatevi che se non usate un plug-in, questo non verrà nemmeno aggiornato: quindi eliminateli senza pensarci su (non basta disattivarli).

2.3 Temi gratuiti

Come regola generale è meglio evitare di usare temi gratuiti, soprattutto se non sono sviluppati da uno sviluppatore noto e di reputazione verificabile.

Il rischio è di usare un tema mal codificato, senza supporto e raramente aggiornato.

La ragione principale è però che i temi liberi possono contenere elementi con codifica Base64, che possono quindi essere utilizzati per inserire subdolamente link di spam nel vostro sito, o altro codice dannoso che potrebbe causare problemi ancora più seri: date una occhiata a questa ricerca (seppur finanziata da una azienda che vende temi) che dimostra come 8 siti su 10 con temi gratuiti contengono un non ben identificato codice in Base64.

Ad ogni modo Google da qualche tempo penalizza fortemente tutti i siti che contengono codice Base64.

Se davvero volete utilizzare un tema libero, vi consiglio di utilizzare solo quelli sviluppati da aziende, o quelli disponibili sul repository ufficiale di WordPress.org che beneficiano del contributo della community.

La stessa logica vale per i plugin. Utilizzare solo i plugin che sono elencati in WordPress.org, o sviluppati da uno sviluppatore noto e attivo.

2.4 Plugins che vogliono accesso in scrittura

Se un plugin pretende l’accesso in scrittura ai file e le directory di WordPress, dovrete prendervi la briga di leggere il codice per assicurarvi che la necessità sia sia legittima (fatevelo eventualmente controllare da una persona di fiducia). Spesso è possibile trovare informazioni utili sui Support Forums o su qualche canale IRC Channel o Slack.

2.5 Utente Admin

Sviluppare con WordPress

Sviluppare con WordPress

Fino alla versione 3.0 l’installazione di WordPress creava automaticamente un utente amministratore “admin“. Ora fortunatamente è possibile scegliere un qualsiasi nome dell’utente amministratore. Peccato però che molte persone  usino ancora “admin” e che (ancora più grave) alcuni web host utilizzino script di auto installazione con un utente “admin” di amministrazione.

La vera questione è però che è inutile rinominare un utente admin: esistono alcuni metodi molto semplici con cui un malintenzionato sarebbe comunque in grado di entrare nel vostro sito (il nome utente cambia ma i riferimenti interni al DB del blog rimangono intatti).

La soluzione è di lasciare il vostro utente admin, ma declassarlo al ruolo di Sottoscrittore. In questo modo se anche un malintenzionato riuscisse a rubare le credenziali dell’admin, potrebbe fare davvero pochi danni. Quindi:

  • create un nuovo utente (meglio se con un nick non utilizzato in email) con privilegi di Autore o Editore.
  • create un altro nuovo utente con un nome difficile ed una password molto forte con privilegi di Amministratore;
  • entrate in WP con l’account appena creato e impostate il ruolo di admin a Sottoscrittore.

2.6 Nascondere il vostro nome utente

Un altro modo in cui un aggressore può potenzialmente accedere al vostro username è attraverso le pagine di archivio autore: WordPress visualizza, infatti, il nome utente nella URL di questa pagina. Ad esempio se il vostro nome utente è “mario”, la vostra pagina di archivio autore sarebbe http://yoursite.com/author/mario

Anche una banale ricerca su Google svelerebbe il vostro nome utente… Perché facilitare il compito agli hacker? Basta cambiare la voce user_nicename nel database usata da WP per creare i permalink della pagina archivio.

Nello specifico il campo user_nicename  si trova nella tabella wp_users. Avrete bisogno di accedere al database di WordPress usando ad esempio phpMyAdmin.

In questo caso però non dimenticate di scegliere un nome utente SEO friendly: non usate caratteri speciali, trattini e soprattutto spazi. un “Mario Rossi” ed un “mario-rossi” sono interpretati dai motori nello stesso modo: ma un eventuale errore 404 generato da un URL mal formattato penalizzerebbe il posizionamento nei motori di ricerca.

Una volta completata la modifica assicuratevi però che la pagina di archivio (con il vecchio URL) non sia stata indicizzata dai motori di ricerca e non sia stata cachata. Se il vecchio URL fosse stato già indicizzato, è possibile richiedere che venga rimosso dai risultati di ricerca di Google.

Come vedete, il processo di creazione di un nome utente non è cosa da poco. E non è sufficiente che sia solo memorabile.

2.6 Disabilitare i trackbacks

Responsive design. Con WordPress

Responsive design. Con WordPress

Il Trackback si è molto diffuso nei blog. In questo caso, un blog riceve una serie di ping da altri blog e, solitamente, mostra, sotto ad ogni Post, l’elenco dei ping ricevuti e riferiti a quello specifico post.

Il Trackback ping può contenere informazioni relative al titolo della risorsa notificata, un estratto della stessa e il titolo del sito Web che ha inviato il ping. L’unica informazione obbligatoria che un ping deve contenere è il permalink della risorsa notificata.

Un fenomeno diffuso è l’utilizzo dei Trackback a scopo di spam, cioè l’invio indiscriminato di Trackback ping allo scopo di far apparire i propri link nell’elenco dei ping di qualche blog.

A volte possono invece essere usati per veri e proprio attacchi DDoS sfruttando inconsapevoli blog “puliti” per fare il lavoro sporco (leggete qui).

Quindi, per ogni nuovo sito web WordPress, è importante disattivare questa funzione andando su Impostazioni> Discussione e quindi deselezionare la casella ““.

2.7 MySQL Database Design

Datevi una lettura alle line guida si Symantec per una progettazione sicura di un DB MySQL.


 

3. Modificare il file wp-config.php

3.1 Secret Keys

Le Secret Keys sono delle stringhe (spesso casuali) che permettono a WordPress di cifrare le informazioni riguardanti l’uso del nostro sito web: sessioni, cookie, password, etc…

Lo stesso WordPress ci viene incontro con una pagina dedicata in grado di generare delle stringhe casuali Ad esempio:

define('AUTH_KEY', 't|8fT{m(cHVnk8k+S5d,0dHW9D4J5kX%N(X8Iov^x]sMw|K^`l;%:4ss+ew3!H+*');
define('SECURE_AUTH_KEY', 'h?jZ+du+K2)$pg+nMIS_+JL|`s{@ALH9U|=Gf.{SG4~!~zvev<TrR,{GMgt[!k#u');
define('LOGGED_IN_KEY', 'r]+%z>q-8DxrK+>+jy~Qs(*k.?;eE(|)Up;E)-|5U,mbz+=S T!/|@A-P@5>/ZpA');
define('NONCE_KEY', 'OK++5~+{{t)byEfW| BQ0YpqZ)W,<?IdH-<=kUwdYY-7GB,)`Z>APl[~t6Dl0aVg');

Basta copiare il codice recuperato dalla pagina di generazione ed incollarlo all’interno del file wp-config.php che si trova nella root del sito.

3.2 Cambiare il suffisso delle tabelle del DB

Tutte le tabelle del database di WordPress, di default, iniziano con il suffisso "wp_". Questo significa che un malintenzionato potrebbe fare affidamento su una struttura del DB del sito nota. Per fortuna WordPress, in fase di installazione, ci permette di cambiare questo suffisso attraverso la modifica di una stringa di configurazione. Lll’interno del file wp-config.php che si trova nella root del sito si può sostituire:

$table_prefix = 'wp_'

ad esempio con:

$table_prefix = 'asd9f7ok_'

Si può quindi scegliere una stringa alfanumerica di difficile identificazione in grado di complicare la vita ad un malintenzionato. E’ però fondamentale fare questa operazione all’inizio di una nuova installazione.

Per chi ha già un sito installato sarebbe possibile modificare il prefisso delle tabelle con questo plugin: a vostro rischio e pericolo, però. Effettuate sempre prima un backup completo.

3.3 Aggiornare costantemente WP

E-Commerce con WordPress e Woocommerce. Creare un negozio online con il CMS più diffuso del mondo

E-Commerce con WordPress e Woocommerce. Creare un negozio online con il CMS più diffuso del mondo

Ogni nuova versione di WordPress contiene patch e correzioni che risolvono le vulnerabilità reali o potenziali. Se non mantenete il vostro sito web aggiornato con l’ultima versione di WordPress, vi esponete ad attacchi diretti. Lo stesso vale per temi e plugin.

Molti hacker colpiscono intenzionalmente le vecchie versioni di WordPress con  problemi di sicurezza noti. Se si mantiene tutto aggiornato avrete meno probabilità di essere violati.

Durante la procedura di aggiornamento (che WP propone con un evidente messaggio) è possibile scegliere se aggiornare l’installazione automaticamente o manualmente.

In WordPress, ci sono quattro tipi di aggiornamenti automatici in background:

  1. Aggiornamenti dei file core
  2. Aggiornamenti dei plugin
  3. Aggiornamenti dei temi
  4. Aggiornamenti dei file di traduzione

Il consiglio è di abilitare almeno l’autoaggiornamento dei files core con una modifica al file wp-config.php che si trova nella root del sito:

define('WP_AUTO_UPDATE_CORE', true);

Maggiori informazioni di dettaglio qui.

3.4 Disabilitare l’editing dei files via dashboard

In una installazione di WordPress, di default, è possibile navigare in Aspetto> Editor e modificare qualsiasi file del tema e dei plugins direttamente dal cruscotto.

Il problema è che se un hacker riuscisse a guadagnare l’accesso al vostro pannello di amministrazione potrebbe mandare in esecuzione qualsiasi tipo di codice.

Quindi è una buona idea per disattivare questa modalità di editing di file, aggiungendo la seguente riga al file wp-config.php:

define( ‘DISALLOW_FILE_EDIT’, true );

 

4. Modificare il file .htaccess

.htaccess è un formato di file di configurazione utilizzato dai server Web, utilizzato per ordinare i contenuti di un sito web.

Il nome del file inizia con un punto perché i file che iniziano con un punto in ambiente Unix-like sono file nascosti.

Il file .htaccess, inserito nell’albero delle directory del server, è in grado di sovrascrivere alcune impostazioni normalmente regolate all’interno della configurazione globale del server. Nelle situazioni di hosting condiviso raramente gli utenti hanno modo di manipolare i file di configurazione del server: in questo caso è possibile utilizzare .htaccess per personalizzare, per quanto possibile, la configurazione del server stesso.

  • Autorizzazione e autenticazione
  • Pagine di errore personalizzate
  • Riscrittura degli URL
  • Controllo della cache

Lo scopo originale dei file .htaccess era quello di consentire il controllo dell’accesso alle cartelle (per esempio, chiedendo una password per accedere al contenuto di una cartella). Oggi i file .htaccess possono sovrascrivere molte altre impostazioni della configurazione, la maggior parte relative al controllo dei contenuti (per esempio: tipo di contenuti e character set, gestione degli URL, handler CGI, ecc.).

Quando in WordPress si attivano i permalink, viene creato automaticamente nella directory principale del sito di installazione un file .htaccess: si tratta di un file di configurazione molto potente che va manipolato con molta attenzione.

Quando WordPress scrive in un file .htaccess, scrive sempre i dati tra le righe # BEGIN WordPress  e # END WordPress. Il carattere “#” indica che tali linee sono semplicemente commenti e non influenzano la configurazione.

Il file .htaccess è un file di configurazione molto potente: ma è sufficiente un minimo errore di sintassi per rompere il vostro sito. Quindi è importante fare un backup del file .htaccess prima di apportare modifiche ad esso.

Alcuni sistemi operativi non consentono di creare un file .htaccess. Il modo più semplice per aggirare questo vincolo è quello di utilizzare un editor di testo, aggiungere i comandi di configurazione desiderati, salvare il file con estensione .txt, caricare il file sul sito attraverso una connessione FTP.
Una volta caricato, rinominare il file in .htaccess.

Nota: per garantire che il vostro codice non venga sovrascritto da WordPress, andrà messo al di fuori delle righe # BEGIN WordPress e # END WordPress.

Per proteggere il file .htaccess è sufficiente modificare il file .htaccess aggiungendo le seguenti istruzioni:

<Files .htaccess>
   order allow,deny
   deny from all
</Files>

Questo è sufficiente per impedire l’accesso al file attraverso una connessione HTTP. Rimarrà comunque possibile accedervi via FTP o cPanel.

4.2 Proteggere il file wp-config.php

Uno dei file più importanti della vostra installazione di WordPress è il file wp-config.php.

Questo file si trova nella directory principale della directory del file di WordPress e contiene i dettagli di configurazione di base del vostro sito, i codici di sicurezza di WordPress e le informazioni di connessione al database. Queste informazioni, naturalmente, sono particolarmente sensibili.

È possibile proteggere il file wp-config.php aggiungendo il seguente frammento al file .htaccess:

<files wp-config.php> order allow,deny deny from all </files>

Come per il caso precedente, questo è sufficiente per impedire l’accesso al file attraverso una connessione HTTP. Rimarrà comunque possibile accedervi via FTP o cPanel.

4.3 Nascondere le pagine Login e Admin

Utilizzando WordPress siamo tutti abituati ad andare alla pagina http://tuosito.com/wp-admin/ (o wp-login) ogni volta che si vuole accedere all’area di amministrazione.

E’ quindi consigliato cambiare l’URL di queste pagine che, per altro, non dovrebbero venire indicizzate dai motori di ricerca. In questo modo soltanto voi potrete conoscere la URL corretta per l’accesso all’area di amministrazione del vostro sito rendendo, ancora una volta, la vita più difficile agli hacker.

E’ sufficiente aggiungere al file .htaccess le seguenti righe:

RewriteRule ^login wp-login.php?loginkey=12345g&redirect_to=http://%{SERVER_NAME}/wp-admin/index.php [L]
RewriteRule ^recover-password wp-login.php?loginkey=12345&action=lostpassword

RewriteCond %{HTTP_REFERER} !^http://%{SERVER_NAME}/wp-admin
RewriteCond %{HTTP_REFERER} !^http://%{SERVER_NAME}/wp-login\.php
RewriteCond %{HTTP_REFERER} !^http://%{SERVER_NAME}/login
RewriteCond %{QUERY_STRING} !^loginkey=12345
RewriteCond %{QUERY_STRING} !^action=logout
RewriteCond %{QUERY_STRING} !^action=lostpassword
RewriteCond %{REQUEST_METHOD} !POST
RewriteRule ^wp-login\.php http://%{SERVER_NAME}/? [R,L]

(Estratto da un files .htaccess trovato qui)

4.4 Prevenire l’esplorazione delle cartelle

L’obiettivo è proteggere le cartelle dall’essere elencate e navigate. Certo, si dice nel giro che evitare l’esplorazione delle cartelle è come nascondere i soldi nel materasso, ma si tratta comunque di una buona norma.

Eppure, è buona norma evitare che l’esplorazione delle directory, insieme ad attuare altre misure per proteggere il vostro sito.Basta aggiungere al file .htaccess:

Options All -Indexes

4.5 Prevenire l’image hot linking

Hot linking, spesso indicato come furto della banda, accade quando un sito linea le risorse di un altro sito. In genere si tratta di font, css, js, ma spesso anche di allegati o immagini pesanti in termini di dimensione di byte.

In sostanza si provoca un carico di richieste su un server differente rubando, appunto, la sua banda.

L’aggiunta di questo frammento di codice al proprio file .htaccess bloccherà l’hotlinking al tuo sito per una specifica risorsa:

RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www\.)?yourdomain.com/.*$ [NC] RewriteRule \.(gif|jpg)$ http://www.yoursite.com/hotlink.gif [R,L]

Avrete bisogno ovviamente di cambiare le stringhe yourdomain.comwww.yoursite.com/hotlink.gif rispettivamente con il vostro dominio e con l’URL della risorsa che volete proteggere (nell’esempio un file .gif).

4.6 Restringere l’accesso all’area Admin

E importante limitare l’accesso alla propria area di amministrazione WordPress solo a persone che in realtà hanno bisogno di accedere ad essa: se il vostro sito non supporta la registrazione utente per la creazione di contenuti per il front-end, i visitatori non dovrebbero essere in grado di accedere alle pagine dentro la cartella /wp-admin o al file wp-login.php.

Se il vostro PC ha un indirizzo IP internet statico (o facente parte di una specifica classe IP assegnata dal provider) è possibile limitare l’accesso all’area di amministrazione.

Aggiungete al file .htaccess nella root del vostro sito la seguente istruzione:

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

Aggiungete tante righe Allow from quanti sono gli IP da autorizzare. Ovviamente modificate gli indirizzi IP degli esempi in alto con i propri indirizzi (potete usare whatismyip.com).

C’è anche un’altra soluzione alternativa: create un nuovo file .htaccess da inserire nella cartella /wp-admin del vostro sito, che contiene tutte le pagine di amministrazione. Copiate la seguente istruzione:

order deny,allow allow from 192.168.5.1 deny from all

Ovviamente, anche in questo caso, modificate l’indirizzo IP dell’esempio in alto con il proprio indirizzo o con un elenco di indirizzi IP separati ad virgola.

Questi interventi permetteranno l’accesso all’area di amministrazione del proprio sito solo al computer con quello specifico indirizzo IP, e bloccherà tutti gli altri computer. Naturalmente, si sarà ancora in grado di accedere ai file tramite FTP, cPanel.

Se però si vuole essere in grado di accedere alla area di amministrazione da qualsiasi indirizzo IP di una rete questa soluzione diventa piuttosto scomoda: non rimane che limitare il numero di tentativi falliti sul login (consiglio in alto).


 

5. Preparare un utile function.php

5.1 Nascondere la versione di WP

Quando si visualizza il codice sorgente della pagina web (lo può fare qualsiasi browser) è possibile trovare un meta tag che contiene il numero di versione di WordPress. Una cosa tipo questa:

<meta name = "generator" content = "WordPress 4.1.1" />

Basta inserire del semplice codice nel file function.php del vostro tema-child.

<?php
// Remove WordPress Meta Generator
remove_action('wp_head', 'wp_generator');
// Hide WordPress Version Info
function hide_wordpress_version() {return '';}
add_filter('the_generator', 'hide_wordpress_version');
?>

Purtroppo queste accortezze, seppur utili, non ci mettono completamente al sicuro: spesso i feed RSS o i commenti possono comunque rivelare il numero di versione della vostra installazione WP.

5.2 Rendere il login silezioso

Se i dati immessi nel login sono sbagliati, la schermata di login di WordPress presenta un messaggio di errore che ci avverte dicendo se il nome utente non esiste o se semplicemente abbiamo sbagliato password: è un aiuto utile per un utente normale, ma un aiuto preziosissimo per un utente malintenzionato.

Per risolvere questo problema, inseriamo il seguente codice all’interno del file functions.php presente nella cartella del tema attivo.

function my_login_messages($error) {
return '<strong>ERROR</strong>: Autenticazione di accesso non valida.';
}
add_filter('login_errors','my_login_messages');

Così facendo, il messaggio d’errore che verrà restituito sarà il più generico possibile senza fornire alcuna informazione sul perché il login non è andato  a buon fine.


 

6. Qualche plugin utile

Verificare che l’utente sia umano

Utilizzare forms con reCAPTCHA, che chiedono all’utente di inserire, sotto forma di testo, quello che vedono in un’immagine: sono un modo utile per fermare attacchi di forza bruta da parte di botnet nel tentativo di indovinare le vostre credenziali (le botnet in genere non possono automatizzare questa parte del processo di accesso).

Ci sono molti plugins che aggiungono il No CAPTCHA reCAPTCHA di Google per il login di WordPress, la registrazione ed il sistema di commenti, così come il modulo di registrazione BuddyPress per la protezione contro lo spam. Come questo plugin Better WordPress reCAPTCHA (with no CAPTCHA reCAPTCHA), largamente utilizzato.

6.1 Limitare i tentativi di login

Nel caso di un hacker o di un bot che tenta un attacco a forza bruta per rompere la password, può essere utile per limitare il numero di tentativi di accesso non riusciti da un unico indirizzo IP.

Ci sono diverso plug-in (come Limit Login Attempts) in grado di limitare il numero di tentativi errati e bloccare un certo IP per un determinato periodo di tempo.

Certo, gli aggressori organizzati utilizzano un gran numero di indirizzi IP diversi, ma è vale la pena ancora una volta complicare loro la vita.

6.2 Autenticazione a due fattori

Abilitare l’autenticazione a due fattori per il vostro sito WordPress migliorerà in modo drastico la sicurezza . Uno dei modi più semplici per farlo è quello di utilizzare Clef per l’autenticazione utilizzando il telefono cellulare.

6.3 Backup

Non si insisterà mai abbastanza sull’importanza di fare regolarmente il backup del proprio sito web: spesso molti rimandano finché poi non è troppo tardi.

La stessa community di WordPress Codex vi dice esattamente come fare ad effettuare un buon backup. Ma se proteggere i vostri dati vi sembra troppo oneroso potete utilizzare alcuni plugins che non solo pianificano un completo e regolare backup a cadenza, ma ve lo depositano anche su cloud (ad esempio su DropBox). Alcuni suggerimenti:

Se però volete davvero fare le cose seriamente vi serve una soluzione a pagamento: per dormire sonni sereni potete rivolgervi a soluzioni come  Backup Buddy and VaultPress.

6.4 Altri aiuti alla sicurezza

Nonostante tutte le misure suggerite sopra, ci sono tonnellate di plugin che è possibile utilizzare per rafforzare la sicurezza del vostro sito e ridurre la probabilità di essere violato.


 

7. Facciamo sul serio!

7.1 Usare una CDN

Una Content Delivery Network (in sigla, CDN, letteralmente “rete per la consegna di contenuti”) è un sistema di server distribuiti sulla rete Internet che collaborano in maniera trasparente per inviare dati ai vari client (in genere contenuti multimediali di grandi dimensioni in termini di banda, come i video).

CloudFlareUna CDN potrebbe anche servire – al limite – per distribuire i files di un banale blog, come i CSS e i JS (richiesti sempre centinaia di volte). Ma la vera utilità è legata al fatto che una CDN si frappone tra un eventuale malintenzionato e il vostro server di hosting.

Esiste un servizio gratuito, offerto da CloudFlare, che nella realtà è un caching reverse proxy, ovvero un server che svolge funzioni di caching dei contenuti (cioè salva temporaneamente in memoria i contenuti per poterli servire più velocemente). Nella pratica si comporta più o meno come una CDN che però fa anche da firewall tra i visitatori ed il vostro blog.

CloudFlare ha una ventina di server sparsi per il mondo: gli utenti sono ovviamente serviti dai server più vicini diminuendo così i tempi di risposta, riducendo le richieste al server di hosting e filtrando le connessioni maligne.

In realtà per un blog italiano che ha una platea italiana, i vantaggi in termini di prestazioni sono tutt’altro che positivi: ma in termini di sicurezza e di disaccoppiamento tra il server ed i client rappresenta una soluzione interessante. Evitando attacchi di tipo DDoS.

7.2 Logging: OSSEC

I Forensics log sono il vostro migliore amico quando si tratta di conoscere profondamente il vostro sito. Contrariamente alle credenze popolari, i registri permettono di vedere ciò che è stato fatto, da chi e quando.

Purtroppo un log non vi restituirà il nome utente di un malintenzionato, ma vi permetterà di identificarne l’IP, la data, l’ora e qualche volta il luogo da cui è partito un attacco. E vi assicuro: sono informazioni importanti.

Inoltre, sarete in grado di capire se sul vostro sito sono attivi tentativi di Cross Site Scripting (XSS), Remote File Inclusion (RFI), Local Inclusion File (LFI) e Directory Traversal. Potrete anche essere in grado di identificare i tentativi di forza bruta.

Ovviamente potrete vedere come e quando sono stati usati il vostro tema ed i plugins, quando qualcuno aggiorna i widget e quando si aggiungono post e pagine. Tutti elementi chiave quando si fa una indagine forense sul vostro server web.

OSSEC è una grandiosa soluzione HIDS (host-based intrusion detection system) open-source che può funzionare su qualsiasi piattaforma. Svolge analisi dei log, verifiche di integrità, monitoraggio del registro di Windows, rilevamento dei rootkit. Genera avvisi basati sul tempo e risponde attivamente agli input.

Esso prevede il rilevamento delle intrusioni per la maggior parte dei sistemi operativi, tra cui Linux, OpenBSD, FreeBSD, OS X, Solaris e Windows. OSSEC ha un’architettura centralizzata, cross-platform che permette a sistemi multipli di essere facilmente monitorati e gestiti.

Quando configurato correttamente (non è cosa banale) OSSEC è davvero potente: diventa capace di catturare tutti i log rilevanti aggregando le informazioni di tutti i siti installati su un server. Filtrando inoltre tutto il rumore.

7.3 Aggiungere SSL and HTTPS in WordPress

Ogni giorno condividiamo le nostre informazioni personali con diversi siti web: che si tratti di fare un acquisto o semplicemente l’accesso al nostro social network preferito. Per proteggere il trasferimento dei dati, è necessario creare una connessione sicura. Questo avviene quando sono disponibili connessioni TLS (Transport Layer Security) o il precedente SSL (Secure Sockets Layer) su HTTPS.

Si tratta sono di protocolli crittografici che permettono una comunicazione sicura dal sorgente al destinatario (end-to-end) su reti TCP/IP (come ad esempio Internet) fornendo autenticazione, integrità dei dati e cifratura operando al di sopra del livello di trasporto.

Secondo me tutto il web dovrebbe girare con protocolli di cifratura TLS. Questo argomento meriretere uno spazio a parte, per cui vi lascio con un paio di link utili per configurare il vostro sito WordPress:


 

Segnalazioni di problemi di sicurezza

Se si pensa di aver trovato una falla di sicurezza (o un baco) in WordPress, si può aiutare segnalando il problema. Vedere la Security FAQ per informazioni su come segnalare problemi di qualsiasi tipo.