Come rendere WordPress più sicuro in 10 Step e con i migliori Plugin
Ultimamente il tema della sicurezza legata all’utilizzo di wordpress è sempre più discusso sia online che nelle conferenze del settore. Questo è dovuto alla grande diffusione del CMS e al conseguente aumento di attachi hacker (Brute Force, SQL Injection […]) nei confronti della piattaforma.
Circa 1/4 del web è fatto con wordpress. Ogni giorni migliaia di siti vengono hackerati a seguito di decine di migliaia se non centinania di migliaia di tentativi di hackeraggio.
Mappa degli attacchi hacker in real time by Norse
Vediamo quindi 10 Step (Best practice e accorgimenti) che possono aiutarci a “blindare” wordpress e renderlo più sicuro.
Partiamo dalle cose più semplici ma non per questo meno importanti, anzi:
1) Aggiornare WordPress
Dalla versione 3.7 wordpress permette di ricevere aggiornamenti automatici, questi aggiornamenti al contrario di quanto molti pensano non riguadano l’intera piattaforma comprese le funzioni core ma prevalentemente fix relativi alla sicurezza e bug in generale. Tenere wordpress aggiornato è fondamentale se volgiamo rendere sicuro il nostro sito.
2) Backup del database
Sempre tra le cose scontate ma non per questo meno importanti è avere un regolare backup del database, molti servizi di hosting lo offrono di default. Per star tranquilli si possono utilizzare alcuni plug-in come:
https://wordpress.org/plugins/wp-db-backup/
o ancora meglio backup to dropbox che effettua il backup anche dei media:
https://wordpress.org/plugins/wordpress-backup-to-dropbox/
3) Non utilizzare l’utente admin
Nelle prime versioni di wordpress il CMS creava di dafult un utente “admin”. Questo utente è ancora utilizzato su molti siti. In un tenetativo di attacco Brute-Force, “admin” sarà sicuramente utilizzato per provare ad accedere al sistema, va cancellato e sostituito con un nome utente più sicuro. Utilizzare un nome del tipo “mario.rossi85” aumenta la nostra sicurezza.
4) Creare un password con livello di sicurezza strong
Creare password efficaci è fondamentale il livello di sicurezza deve essere strong, per creare password in maniera veloce si può utilizzare un generatore di password sicure:
https://www.nexcess.net/resources/tools/secure-password-generator/
Si possono creare password tradizionali per esempio:
aFZTeEKaHipRb9li
O le cosiddette “passphrase” password composte da più parole:
70sign40one52sleep50wear38exercise
Un buon esercizio potrebbe essere creare una frase che possiamo facilmente ricordarci e utilizzarla come password, in questo cito l’esempio fatto da Edward Snowden in un suo bellissimo intervento sulla sicurezza online:
margaretthatcheris100%sexy
5) Utilizzare le wordpress key
Queste key vanno aggiunte al file wp-config.php e servono ad aumentare la sicurezza nella utilizzo/gestione dei cookie di wordpress, basta copiare le chiavi dal generatore ufficiale:
https://api.wordpress.org/secret-key/1.1/
e incollarle nell’apposito spazio nel wp-config.php
define(‘AUTH_KEY’, ‘.=qnVLI&Aii3?fY|1Z)_lF+mo 0r?XP,Aq X-x^I:WsFH[}M-]9qrpjF#A_kwOYO’);
define(‘SECURE_AUTH_KEY’, ‘m1lN?CiM2ih:H~dJf4RXjv{:vyC1G=a07lc1_Cu5Jk?]-QID!MH6+Wo_aUXj>t&^~}}]8Sbaw/u/x’);
define(‘NONCE_KEY’, ‘SfN*%D||tM-PgV)f{+Vr;jo0|o}Y9?I~yk)BF&YX>V&l:pr}DiuD1DFq0_9&-=Gx’);
6) Cambiare il prefisso delle tabelle nel database
Il prefisso di default delle tabelle di wordpress è “wp_” questo (come l’utente di defalt “admin”) è un informazione importante che noi “regaliamo” ad eventuali hacker.
Cambiare il prefisso per esempio in “hsdfg67hjk32_” diminuisce le possibilità di essere vittime di attacchi SQL Injection.
Se avete gia installato wordpress e volete cambiare il prefisso delle tabelle si può fare con alcuni plugin (che vedremo piu avanti) o a “mano”.
Per farlo senza plugin occorre cambiare alcune impostazioni nel wp-config.php, rinominare tutte le tabelle nel database con il nuovo prefisso (anche le tabelle di eventuali plug-in) e aggiornare le referenze delle tabelle usermeta e options.
Qui di seguito posto il codice necessario, se si vuole utilizzare questa soluzione e non si è molto ferrati con SQl consiglio di fare dei test su una installazione di wordpress vuota. Successivamente rifare il procedimento sul sito online in mantainence mode (logicamente prima occorre fare un backup di tutto il sito e del database).
Nel esempio il mio nuovoprefisso sarà ‘newprefix_’.
6.1) Modifichiamo il wp-config.php
Apriamo il file config.php e cambiamo il prefisso ‘wp_’ con quello nuovo:
$table_prefix = ‘newprefix_’;
6.2) Cambiamo il prefisso di tutte le tabelle nel database
Dal pannello phpmyadmin incolliamo nella tab sql le seguenti query:
[sql]
RENAME table `wp_commentmeta` TO `newprefix_commentmeta`;
RENAME table `wp_comments` TO `newprefix_comments`;
RENAME table `wp_links` TO `newprefix_links`;
RENAME table `wp_options` TO `newprefix_options`;
RENAME table `wp_postmeta` TO `newprefix_postmeta`;
RENAME table `wp_posts` TO `newprefix_posts`;
RENAME table `wp_terms` TO `newprefix_terms`;
RENAME table `wp_term_relationships` TO `newprefix_term_relationships`;
RENAME table `wp_term_taxonomy` TO `newprefix_term_taxonomy`;
RENAME table `wp_usermeta` TO `newprefix_usermeta`;
RENAME table `wp_users` TO `newprefix_users`;
[/sql]
6.3) Aggiorniamo le referenze nelle tabelle usermeta e options
[sql]
UPDATE `newprefix_usermeta` SET `meta_key` = REPLACE( `meta_key`, ‘wp_’, ‘newprefix_’ )
[/sql]
[sql]
UPDATE `newprefix_options` SET `option_name` = ‘newprefix_user_roles’ WHERE `option_name` = ‘wp_user_roles’
[/sql]
ora dal panello phpmyadmin controlliamo se i prefissi sono cambiati correttamente.
7) Utilizzare il file .htaccess
Il file .htaccess è un potente mezzo che ci consente di effettuare operazioni lato server. Può essere utilizzato per limitare l’accesso ad aree del nostro sito. Visto la grande varietà di configurazioni e server disponibili queste tecniche vanno testate, qui di seguito quelle più comunemente supportate.
Proteggere il file wp-config.php
[code]
order allow,deny
deny from all
[/code]
Proteggere la cartella wp-includes
[code]
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ – [F,L]
RewriteRule !^wp-includes/ – [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ – [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php – [F,L]
RewriteRule ^wp-includes/theme-compat/ – [F,L]
[/code]
Proteggere il file .htaccess stesso
[code]
order allow,deny
deny from all
[/code]
Con questi codice limitiamo l’accesso a file di configurazione e aree che al visitatore non interessano.
8) Nascondere la versione di wordpress
Ispezionando il codice di un sito wordpress è possibile vedere la versione installata, questo può facilitare il lavoro degli hackers che sapendo il numero della versione potrebbero (se il cms non è aggiornato) risalire a eventuali bug. Per nascondere la versione di wordpress utilizziamo il seguente codice nel file functions.php:
/* Hide Version Number */
/* Hide WP version strings from scripts and styles
* @return {string} $src
* @filter script_loader_src
* @filter style_loader_src
*/
function fb_remove_wp_version_strings( $src ) {
global $wp_version;
parse_str(parse_url($src, PHP_URL_QUERY), $query);
if ( !empty($query[‘ver’]) && $query[‘ver’] === $wp_version ) {
$src = remove_query_arg(‘ver’, $src);
}
return $src;
}
add_filter( ‘script_loader_src’, ‘fb_remove_wp_version_strings’ );
add_filter( ‘style_loader_src’, ‘fb_remove_wp_version_strings’ );/* Hide WP version strings from generator meta tag */
function fb_remove_version() {
return ”;
}
add_filter(‘the_generator’, ‘fb_remove_version’);
9) Cancellare i temi e i plug-in non utilizzati
é importante cancellare temi e plugin che non utilizzaimo per diminuire la possibilità di falle nel codice. I plugin e i temi utilizzati devono (se possibile) essere sempre aggiornati all’utlima versione. Questo è uno dei maggiori fattori di rischio in una installazione wordpress.
10) Utilizzare i permessi corretti
Per quanto rigurda i permessi di file e cartelle, tutte le cartelle dovrebbero essere 755 e i file 644, il wp-config.php dovrebbe essere settato con permessi 600 ecco un esempio:
root directory www.miosito.com/ 0755
wp-admin www.miosito.com/wp-admin 0755
wp-content www.miosito.com/wp-content 0755
wp-includes www.miosito.com/wp-includes 0755
.htaccess www.miosito.com/.htaccess 0644
readme.html www.miosito.com/readme.html 0400
wp-config.php www.miosito.com/wp-config.php 0600
Questi settaggi sono un esempio alcune configurazioni server potrebbero essere anche più restrittive per esempio 0750 al posto di 0755.
Plug-in per la sicurezza
Ci sono molti plug-in per la gestione e l’aumento della sicurezza in wordpress, alcuni svolgono una specifica funzione altri sono un vero e propio sistema all-in-one per la gestione della sicurezza del sito. Qui ne elenco alcuni che ho avuto l’occasione di provare e che reputo molto validi:
Google Recaptcha
https://wordpress.org/plugins/wp-login-recaptcha/
Questo plugin aggiunge il nuovo recaptcha di google alla schermata di login di wordpress, basta inserire user, password e cliccare il checkbox “i’m not a robot” per verificare che chi sta cercando di accedere non è un software ma una persona.
Il sistema calcola il movimento del mouse a altre variabili “segrete”, occasionalmente ci viene chiesto di selezionare delle immagini, non ci sono più perdite di tempo nello scrivere lettere e parole.
Grazie al recaptcha si prevengono gli attacchi di tipo Brute-Force.
Wordfence
https://wordpress.org/plugins/wordfence/
Questo plugin è un pacchetto completo per aumentare la sicurezza di wordpress, consente di effettuare molte verfiche e accorgimenti per rendere il sito più sicuro.
Le funzionalità più importanti sono:
- Scan del sito per verificare che non ci siamo malware
- Monitoraggio dell’attività del sito in Real-Time per vedere chi e cosa visita il nostro sito
- Sistema di caching “Falcon” in grado di rendere il sito molto performante fino a 30/50 volte più veloce
- Possibilita di bloccare Ip (anche in automatico dopo tot. login falliti)
- Possibilità di login con verifica tramite cellulare (a pagamento)
- Blocco geolocalizzato degli ip per bloccare visite da un determinato stato (a pagamento)
- Scan del sito automatico
- Firewall
- Sistema di notifica che ci avvisa quando avviene qualcosa di sospetto
Wordfence può essere molto utile su siti che sono stati hackerati, tramite il suo sistema di scan può trovare eventuali malware presenti nel sito e prevenire futuri attacchi con le funzionalità di blocco ip.
Wp Security
https://wordpress.org/plugins/wp-security-scan/
Questo plugin consente di effettuare varie modifiche al nostro sito per aumentarne la sicurezza. Alcune le abbiamo implementate prima “a mano” come nascondere la versione di wordpress o cambiare il prefisso delle tabelle. Con wp security queste operazioni possono essere fatte in un click da pannello di controllo.
Offre poi funzioni avanzate simili a wordfence come il live traffic e lo scan del sito.
Blocco Ip Geolocalizzato
Vi sono poi plugin che consentono di bloccare gli ip geolocalmente. Come:
https://wordpress.org/plugins/iq-block-country/
Utilizzando il live traffic monitoring di wordfence potremmo vedere tentativi di accesso da ip per esempio russi. In tal caso potremmo disabilitare la visione del sito per gli ip di questo paese. Logicamente se non ci interessa rendere il sito visibile in quello stato.
Conclusioni
Quando si parla di sicurezza on line non è mai abbastanza, in questo articolo ho voluto fare una panoramica sulle startegie e sulle attività che si possono attuare per rendere un sito più sicuro. Si può fare di più, stiamo andando nella giusta direzione.
Stay Tuned!