Sicurezza Wordpress: proteggere il proprio sito

Sicurezza Wordpress: proteggere il proprio sito
Feb 11 Scritto da 
Pubblicato in Web Design Blog
Vota questo articolo
(0 Voti)

WordPress e la sicurezza dei siti che lo adottano è da sempre un tema largamente ribattuto su cui si è scritto molto.

Dopo l'uscita della versione 4.7.1 di WordPress, che ha lasciato le api non protette, molti siti web realizzati con questo CMS sono stati attaccati con successo dagli hackers di mezzo mondo, tanto che lo stesso WordPress ha dovuto correre ai ripari lanciando immediatamente la versione 4.7.2 che in  odo da correggere problema.

In questo articolo cercheremo di capire se ci sono dei metodi per mettere al riparo dagli attacchi il proprio sito realizzato con WordPress utilizzando uno degli ottimi plugin che sono a disposizione o con dei pratici accorgimenti e qualche linea di codice.

 

C'è davvero bisogno di un plug-in per la sicurezza?

Diciamo la verità nella maggior parte dei casi questo tipo di plugin non serve.

I plugin per la sicurezza Wordpress sono software certamente utilissimi ma che tendono a appesantire particolarmente il server ed il sito, rallentandone il tempo di caricamento, quindi l’efficacia e in definitiva aumentando la frequenza di rimbalzo o diminuendo le conversioni.

Inoltre la maggior parte dei siti in WordPress è di piccole dimensioni il che lo rende un sito che difficilmente sarà attaccato in modo massivo da malintenzionati a caccia di dati sensibili (carte di credito, emails, …) o da concorrenti sleali. Gli attacchi più frequenti sono per l'installazione di malware di varia natura sfruttando gli exploit propri del sistema WordPress o di uno dei tanti plugin che sono stati installati: in questo caso la finalità non è danneggiare il sito o rubare dati e informazioni, ma sfruttare le risorse del sistema a proprio piacimento, molte volte in modo del tutto invisibile all’occhio di un webmaster poco attento.

Questo tipo di attacchi sono in effetti piuttosto facili da bloccare prendendo i dovuti accorgimenti.

Aggiornamenti frequenti

Dovrebbe essere inutile dirlo. Tenete aggiornati i vostri Wordpress. Molte volte i sistemi non vengono aggiornati per pigrizia o per paura di fare qualche danno. In realtà, Wordpress, come molti CMS, ha reso l’operazione molto semplice. Basta solo avere l’accortezza di effettuare un backup ogni volta. Noi consigliamo l’ottimo Akeeba Backup che crea pacchetti autoinstallanti qualora ci fosse il bisogno di ripritinare il sistema.

Non installate troppi plugins

Come prima cosa e norma generale e bisognerebbe evitare di installare plugin da fonti sconosciute. Ricordate sempre che un plugin altro non è che un software realizzato in PHP spesso da sconosciuti (almeno per voi) viene aggiunto al vostro sito: in realtà non sapete né chi sono queste persone né come questo plugin sia stato scritto.

Anche nel caso in cui non sia stata inserita volontariamente una backdoor, succede, purtroppo molto spesso, che una cattiva programmazione porti ad una vulnerabilità del plugin e del sistema intero. Quando installate un plugin, quindi, cercate di assicurarvi che sia stato realizzato secondo criteri di sicurezza e qualità anche leggendo le recensioni, informandovi sui forum e, in definitiva, anche analizzando il codice stesso del plugin.

Usare password sicure

Una di quelle cose che non entra mai in testa a nessuno, anche tra i nostri clienti: le password devono essere difficili. E non solo quelle.

È la combinazione di nome utente e password a rendere sicuro il vostro accesso: niente nomi utente come “admin”, o uguale al nome del sito o al vostro nome. Usate un soprannome, un codice o una sequenza numerica che solo voi conoscete.

Stessa cosa per la password: se proprio non volete utilizzare un password generator che crea una combinazione indecifrabile di caratteri, numeri e simboli, spesso troppo difficile da ricordare, provate ameno a combinare insieme un soprannome, il nome di un vostro amico (maiuscole e minuscole) a una data non troppo scontata, magari separandoli con un simbolo (#,$£…)

Proteggere il proprio WordPress

Come ha dimostrato l'ultima versione di WordPress anche un sito privo di plugin, ben aggiornato e mantenuto, non è al sicuro.

Per proteggere un piccolo sito dagli attacchi più comuni non serve appesantire il sistema con troppi plugin, firewall e sistemi di sicurezza: bastano degli accorgimenti nel file .htaccess e nel file wp-config.php e un paio di modifiche al functions.php del tema.

Proteggere WordPress da .htaccess

Per chi non lo sapesse questo file da le istruzioni fondamentali al server e regola, tra le altre cose, gli accessi ai singoli file.

Per aumentare la sicurezza del proprio sito è, spesso, sufficiente bloccare qualsiasi accesso web ad ogni file php presente nello spazio web salvo che non sia stato espressamente autorizzato ad essere eseguito.

Lo snippet di codice che segue è da mettere in cima al vostro .htaccess e servirà a bloccare qualunque esecuzione via web di codice PHP.

HTACCESS blocco php

View source
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} \.php$
RewriteCond %{REQUEST_FILENAME} !/index[23]?\.php$
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^([^/]+/)*([^/.]+\.)+php$ - [F]
</IfModule>

Il sistema è molto banale e prevede che voi autorizzate singolarmente tutti i file php che volete che siano eseguiti, bloccando istantaneamente l'esecuzione di ogni altro file php compreso il malware.

Una volta bloccati tutti i file dovremo poi ricordarci, quindi, di abilitare tutti i singoli file che servono al normale funzionamento di WordPress uno per uno. Qualcuno magari potrà pensare che non serva autorizzare i file uno a uno, ma che possa essere sufficiente autorizzare tutti i file contenuti nella cartella wp-admin. Questo creerebbe una falla all'interno del nostro sistema dal momento che un attacco hacker potrebbe installare proprio in quella cartella un file alieno ed in quel caso sarebbe in grado di eseguirlo.

Molto meglio perdere un po' di tempo e trovare tutti i singoli file necessari al funzionamento di WordPress e autorizzarli uno a uno.

Qui di seguito trovate il codice già pronto.

HTACCESS autorizza solo wordpress

View source
<IfModule mod_rewrite.c>
RewriteEngine On
 
## Allowed files
RewriteRule ^wp-login\.php$ - [L]
#RewriteRule ^wp-signup\.php$ - [L]
 
## WORDPRESS ADMIN
RewriteRule ^wp-admin/about\.php$ - [L]
RewriteRule ^wp-admin/admin\.php$ - [L]
RewriteRule ^wp-admin/admin-ajax\.php$ - [L]
RewriteRule ^wp-admin/admin-footer\.php$ - [L]
RewriteRule ^wp-admin/admin-functions\.php$ - [L]
RewriteRule ^wp-admin/admin-header\.php$ - [L]
RewriteRule ^wp-admin/admin-post\.php$ - [L]
RewriteRule ^wp-admin/async-upload\.php$ - [L]
RewriteRule ^wp-admin/comment\.php$ - [L]
RewriteRule ^wp-admin/credits\.php$ - [L]
RewriteRule ^wp-admin/custom-background\.php$ - [L]
RewriteRule ^wp-admin/custom-header\.php$ - [L]
RewriteRule ^wp-admin/customize\.php$ - [L]
RewriteRule ^wp-admin/edit\.php$ - [L]
RewriteRule ^wp-admin/edit-comments\.php$ - [L]
RewriteRule ^wp-admin/edit-form-advanced\.php$ - [L]
RewriteRule ^wp-admin/edit-form-comment\.php$ - [L]
RewriteRule ^wp-admin/edit-link-form\.php$ - [L]
RewriteRule ^wp-admin/edit-tag-form\.php$ - [L]
RewriteRule ^wp-admin/edit-tags\.php$ - [L]
RewriteRule ^wp-admin/export\.php$ - [L]
RewriteRule ^wp-admin/freedoms\.php$ - [L]
RewriteRule ^wp-admin/import\.php$ - [L]
RewriteRule ^wp-admin/index\.php$ - [L]
RewriteRule ^wp-admin/install\.php$ - [L]
RewriteRule ^wp-admin/install-helper\.php$ - [L]
RewriteRule ^wp-admin/link\.php$ - [L]
RewriteRule ^wp-admin/link-add\.php$ - [L]
RewriteRule ^wp-admin/link-manager\.php$ - [L]
RewriteRule ^wp-admin/link-parse-opml\.php$ - [L]
RewriteRule ^wp-admin/load-scripts\.php$ - [L]
RewriteRule ^wp-admin/load-styles\.php$ - [L]
RewriteRule ^wp-admin/media\.php$ - [L]
RewriteRule ^wp-admin/media-new\.php$ - [L]
RewriteRule ^wp-admin/media-upload\.php$ - [L]
RewriteRule ^wp-admin/menu\.php$ - [L]
RewriteRule ^wp-admin/menu-header\.php$ - [L]
RewriteRule ^wp-admin/moderation\.php$ - [L]
RewriteRule ^wp-admin/ms-admin\.php$ - [L]
RewriteRule ^wp-admin/ms-delete-site\.php$ - [L]
RewriteRule ^wp-admin/ms-edit\.php$ - [L]
RewriteRule ^wp-admin/ms-options\.php$ - [L]
RewriteRule ^wp-admin/ms-sites\.php$ - [L]
RewriteRule ^wp-admin/ms-themes\.php$ - [L]
RewriteRule ^wp-admin/ms-upgrade-network\.php$ - [L]
RewriteRule ^wp-admin/ms-users\.php$ - [L]
RewriteRule ^wp-admin/my-sites\.php$ - [L]
RewriteRule ^wp-admin/nav-menus\.php$ - [L]
RewriteRule ^wp-admin/network\.php$ - [L]
RewriteRule ^wp-admin/options\.php$ - [L]
RewriteRule ^wp-admin/options-discussion\.php$ - [L]
RewriteRule ^wp-admin/options-general\.php$ - [L]
RewriteRule ^wp-admin/options-head\.php$ - [L]
RewriteRule ^wp-admin/options-media\.php$ - [L]
RewriteRule ^wp-admin/options-permalink\.php$ - [L]
RewriteRule ^wp-admin/options-reading\.php$ - [L]
RewriteRule ^wp-admin/options-writing\.php$ - [L]
RewriteRule ^wp-admin/plugin-editor\.php$ - [L]
RewriteRule ^wp-admin/plugin-install\.php$ - [L]
RewriteRule ^wp-admin/plugins\.php$ - [L]
RewriteRule ^wp-admin/post\.php$ - [L]
RewriteRule ^wp-admin/post-new\.php$ - [L]
RewriteRule ^wp-admin/press-this\.php$ - [L]
RewriteRule ^wp-admin/profile\.php$ - [L]
RewriteRule ^wp-admin/revision\.php$ - [L]
RewriteRule ^wp-admin/setup-config\.php$ - [L]
RewriteRule ^wp-admin/term\.php$ - [L]
RewriteRule ^wp-admin/theme-editor\.php$ - [L]
RewriteRule ^wp-admin/theme-install\.php$ - [L]
RewriteRule ^wp-admin/themes\.php$ - [L]
RewriteRule ^wp-admin/tools\.php$ - [L]
RewriteRule ^wp-admin/update\.php$ - [L]
RewriteRule ^wp-admin/update-core\.php$ - [L]
RewriteRule ^wp-admin/upgrade\.php$ - [L]
RewriteRule ^wp-admin/upgrade-functions\.php$ - [L]
RewriteRule ^wp-admin/upload\.php$ - [L]
RewriteRule ^wp-admin/user-edit\.php$ - [L]
RewriteRule ^wp-admin/user-new\.php$ - [L]
RewriteRule ^wp-admin/users\.php$ - [L]
RewriteRule ^wp-admin/widgets\.php$ - [L]
RewriteRule ^wp-content/plugins/jch-optimize/assets/jscss.php$ - [L]
RewriteRule ^wp-content/plugins/jch-optimize/assets2/jscss.php$ - [L]
RewriteRule ^wp-content/plugins/jch-optimize/assets3/jscss.php$ - [L]
RewriteRule ^wp-content/plugins/jch-optimize/assets/modrewrite.php$ - [L]
RewriteRule ^wp-content/plugins/jch-optimize/assets2/modrewrite.php$ - [L]
RewriteRule ^wp-content/plugins/jch-optimize/assets3/modrewrite.php$ - [L]
 
</IfModule>

Buona norma, poi, è bloccare qualunque accesso diretto alla cartella wp-includes, al file wp-config.php e dal file .htaccess stesso così che nessuno dall'esterno possa riuscire a modificarlo.

HTACCESS protezione wp-config.php

View source
 
<IfModule mod_rewrite.c>
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]
</IfModule>
 
# Deny access to wp-config.php file
<files wp-config.php>
order allow,deny
deny from all
</files>
 
<files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
satisfy all
</files>

Una volta che avete blindato in questo modo il vostro sito potrete dormire relativamente tranquilli sul fatto che nessuno eseguirà del malware sul vostro sito.

Questa operazione però non basta.

Generalmente io aggiungo dei criteri di ridondanza, inserendo nella cartella wp-content un file .htaccess che permette l'apertura dei soli files statici e all'interno della cartella uploads un ulteriore file .htaccess che blocca l'esecuzione di qualunque php.

HTACCESS /wp-content

View source
Order deny,allow
Deny from all
<Files ~ ".(xml|css|js|jpe?g|jpg|png|gif|pdf|docx|rtf|odf|zip|rar|ttf|woff2|woff|eot|svg|ico)$">
Allow from all
</Files>

HTACCESS /uploads

View source
<Files *.php>
deny from all
</Files>

Questo perché nella maggior parte dei casi gli attacchi si concentrano proprio su queste due cartelle e, quindi, aggiungere parametri di sicurezza ridondanti è buona norma.

Disabilitare l’editing di tema e plugin da backend

Altro piccolo intervento di sicurezza che si può fare per tenere al sicuro il proprio WordPress è bloccare la possibilità di editare i file php di tema e plugin direttamente dal pannello di amministrazione.

Capisco che per molti di voi questa funzionalità possa rappresentare un certo grado di comodità, ma è anche fonte di insicurezza dal momento che, se qualche malintenzionato avesse accesso al vostro account, potrebbe intervenire manualmente sui singoli file del tema o dei plugin modificandoli a suo piacimento.

Questa funzionalità, in fondo non necessaria di WordPress, si blocca inserendo all'interno del file wp-config.php la seguente linea di codice.

BLOCCO EDITING DA BACKEND

View source
  1. define('DISALLOW_FILE_EDIT', true);

Bloccare le api di XMLRPC.php

Infine si può rendere ancora più sicuro il nostro sistema WordPress bloccando le api xmlrpc che nella maggior parte dei casi non servono.

Entrate nel vostro file functions.php inserite la seguente linea di codice che blocca tutte le api e per maggiore sicurezza potrete inserire anche nel file .htaccess il blocco del file stesso che le gestisce.

BLOCCO API WORDPRESS

View source
  1. add_filter('xmlrpc_enabled', '__return_false');

HTACCESS blocco XMLRPC

View source
<Files xmlrpc.php>
order deny,allow
deny from all
</Files>

Chi avesse installato Jetpack o chi volesse utilizzare WordPress.com per editare il proprio sito non può bloccare questa funzionalità in quanto queste due funzioni utilizzano ampiamente le api.

Tutti gli altri possono disattivarle tranquillamente dal momento, che non usandole, sono soltanto un inutile consumo di risorse oltre che fonte e sorgente di un possibile attacco.

Attivare mod_security

Infine ricordatevi di attivare il mod_security dal pannello di amministrazione del vostro hosting e per, chi può farlo, riducete il numero di tentativi di login in un minuto prima del ban del IP in modo da scongiurare i bruteforce attacks.

Proteggere WordPress con i plugin.

Chi non volesse smanettare con il codice, non avesse accesso diretto ai files oppure desiderasse avere un ulteriore livello di sicurezza sul proprio sito, potrebbe fare ricorso ad uno dei plug-in per la sicurezza disponibili.

Generalmente sconsiglio di installarne più di uno visto che questo risulterebbe in un affaticamento inutile del vostro server, soprattutto se vi trovate su un condiviso.

All'interno del marketplace dei plugin di WordPress ci sono delle ottime soluzioni per rendere più sicuro il vostro sito:

  • Wordfence, firewall e antimalware gratuito (disponibile anche in versione premium) vi avvisa di ogni tentativo di login sia di quelli che hanno successo, sia di quelli che non hanno successo ed è in grado, anche a cadenze pianificate, di analizzare tutti i files presenti all'interno del vostro spazio web alla ricerca di malware e, come un vero e proprio antivirus, di rimuovere i file infetti o metterli in quarantena.
    Il sistema offre una protezione eccellente a scapito della performance del sito che tende a rallentare un po' soprattutto quando gli accessi sono numerosi.
  • Altro plugin che generalmente si usa è Sucuri disponibile una versione gratuita che nella versione a pagamento. C'è da notare però che, mentre wordfence anche nella versione gratuita offre un ottimo grado di protezione, Sucuri nella versione gratuita è abbastanza inutile mentre quando si passa alla versione a pagamento, che però è piuttosto cara, si ottiene un livello di protezione molto superiore a quello di Wordfence.

Questi questi sono soltanto dei possibili plug-in per la sicurezza che potresti installare ma come dicevo qualche riga sopra, spesso del tutto superflui. Su siti che non fanno raccolta di dati personali o che non sono bersaglio potenziale di attacchi mirati e intenzionali, possono essere sufficienti le modifiche che vi abbiamo indicato in questo articolo per mettere in sicurezza il vostro sito web.

Sentitevi liberi di indicare qui sotto nei commenti quali sono le vostre strategie per rendere sicuro il vostro sito WordPress e per suggerire quali plugin secondo voi sono i migliori.

Etichettato sotto :
593 Ultima modifica il Sabato, 11 Febbraio 2017
ProgettoWebFirenze

Da ormai oltre 10 anni combatto al fianco dei clienti la dura battaglia per l'indicizzazione dei loro siti web.

Dopo studi di economia e marketing, ho lavorato per qualche tempo presso una agenzia SEO di New York dove ho appreso i primi segreti, gioito per i primi successi e imparato dai primi fallimenti

Oggi, a distanza di qualche anno, ho fondato ProgettoWebFirenze, agenzia di produzione e indicizzazione di siti web a Firenze: tra sviluppatori, grafici, SEO e commerciali siamo ormai in molti e continuiamo a crescere.

Questo è il mio (nostro) blog dove raccogliamo notizie, consigli pareri e qualche sciocchezza sul argomenti come il web design, la SEO ed il web marketing in generale.

Lascia un commento

Assicurati di aver digitato tutte le informazioni richieste, evidenziate da un asterisco (*). Non è consentito codice HTML.

Vuoi avere informazioni? Lasciaci il tuo contatto.

Veniamo noi da te!

Riempi tutti i campi
Grazie, ti richiameremo appena possibile
* Le tue informazioni personali sono protette. Leggi la nostra Privacy Policy per maggiori informazioni

logo bianco

Agenzia web per la creazione di siti internet a Firenze.

Se hai bisogno di maggiori informazioni sui nostri servizi web, sui nostri piani di gestione di web marketing e su tutto quello che facciamo, contattaci quando vuoi e saremmo ben lieti di dare una risposta a tutte le tue domande.

Ma per cortesia, evita di copiare i nostri contenuti creativi: sono stati reati nel tempo con fatica e passione. Se hai una agenzia web tutta tua e stai cercando ispirazione contattaci e saremmo ben lieti di aiutarti. Ma non copiare. Il copyright è una cosa seria.