Indice dei contenuti dell'articolo:
Una delle richieste più gettonate di appassionati e sviluppatori WordPress riguarda la sicurezza della propria installazione e la possibilità di difendersi da quelle misteriose forze oscure chiamati hacker.
La risposta nella maggior parte dei casi viene data su gruppi Facebook, social e newsletter consigliando l’installazione di plugin per la sicurezza come WordFence, Sucuri, iThemes Security, molto spesso addirittura tutti insieme.
Quello che non viene detto e che per lo più non si sa è che questi plugin hanno un impatto sulle performance importante, in quanto per ogni visita e per diverse azioni (come ad esempio il login) questi script (scritti ovviamente in un linguaggio sicuramente non performante come il PHP) vanno ad eseguire tutta una serie di operazioni che impattano in latenza e carico di CPU.
Come funzionano questi plugin di sicurezza ? Vediamo WordFence ad esempio.
Direttamente la loro sito : https://www.wordfence.com/blog/2017/01/how-wordpress-firewall-works/ riportiamo la versione tradotta in italiano.
“Quando attivi il firewall di Wordfence, utilizziamo una tecnica che indica al tuo server web di eseguire il codice del firewall di Wordfence prima di qualsiasi altro codice PHP sul tuo sito web. Il modo in cui lo facciamo è includere una direttiva nel tuo file .htaccess chiamato ‘auto_prepend_file’. Questa direttiva punta al codice di Wordfence e garantisce che Wordfence venga eseguito prima di qualsiasi altra cosa.
Una volta configurato il tuo sito Web per l’avvio del firewall di Wordfence, qualsiasi richiesta arrivi, indipendentemente dal file PHP a cui tenta di accedere, verrà prima elaborata da Wordfence per verificare se è sicura o meno. Il nostro firewall WordPress eseguirà la richiesta attraverso il suo set di regole, eseguendo un’analisi dettagliata ad alte prestazioni e prenderà una decisione per bloccare la richiesta o consentirla.
Il codice del firewall che esegue questa decisione prima di qualsiasi altra cosa, incluso WordPress. Ciò significa che il codice WordPress non è stato caricato e il database non è ancora connesso. Questo rende il codice del firewall di Wordfence incredibilmente veloce . Possiamo bloccare una richiesta malevola prima ancora che si connetta al tuo database e prima che il voluminoso codice WordPress e l’ambiente API siano caricati.
Il codice firewall di Wordfence viene eseguito prima di qualsiasi altra cosa, incluso WordPress. Ma ha anche la possibilità di trasferire i dati a WordPress e ottenere dati dall’API di WordPress. Questo ci consente di incorporare l’identità dell’utente nel nostro set di regole in modo che possiamo decidere se autorizzare o meno l’accesso di un utente, basandosi non solo sul contenuto della richiesta, ma su chi sono e su quale livello di accesso hanno all’interno di WordPress.
L’utilizzo di questo modello di esecuzione ad alte prestazioni significa che gli hacker raggiungono solo il superfluo firewall di Wordfence e non riescono a ottenere oltre. Visitatori del sito amici, crawler e utenti possono accedere al tuo sito web completo. Ciò mantiene il tuo sito Web WordPress veloce e sicuro.”
Alte prestazioni ? Davvero ?
Cosa significa in fondo Alte prestazioni ? In relazione a cosa ? Una Ferrari in fondo è veloce. Ma in relazione a chi ? A cosa ? Quali sono i criteri di paragone ?
Alte prestazioni in questo caso significa che in fondo il modo adottato di lavorare è quello migliore e più veloce per un plugin WordPress che debba occuparsi di funzionare come WAF (Web Application Firewall), tuttavia il fatto che utilizzi PHP (un linguaggio davvero lentissimo e bloccante) per eseguire i controlli AD OGNI VISITA fa di questo plugin una soluzione assolutamente non ideale per un blog o un sito WordPress ad alto traffico.
Ricordiamoci sempre che PHP è un linguaggio lentissimo.
Come riportato da moltissimi Benchmark, PHP ha un consumo di CPU davvero elevato se paragonato ad altri linguaggi come node.js da cui abbiamo riportato il grafico qui sotto. Questo ha un forte impatto sulle performance.
Ve lo immaginate un sito che per ogni singola visita debba eseguire anche una sola banalissima operazione in PHP ? Ci si rende o conto o no che il linguaggio di programmazione PHP è quanto di più lento possa esistere ? Ci rendiamo conto che se abbiamo 1000 o più visitatori online è impensabile azionare PHP per ogni visitatore onde evitare un rallentamento importante delle prestazioni fino ad un crash del sistema ?
Prendiamo ad esempio questa schermata di 5 giorni fa. Un noto blog ad alto traffico con circa 15 mila utenti connessi al minuto, ovvero circa 250 utenti al secondo. Avrebbe davvero senso eseguire un processo PHP per ogni utente ? No. Ovviamente.
Il nostro consiglio
Il miglior consiglio che possiamo dare in merito alla sicurezza WordPress è quello di valutare molto bene la scelta di installare questi plugin.
Se avete un sito istituzionale che viene aggiornato poco frequentemente e non ha un grosso picco di visitatori, potreste anche utilizzarlo considerando che comunque ciò graverà un carico sulla macchina maggiore così come anche la latenza. Come vantaggio avrete quello di avere il sito un po’ più sicuro.
Se invece state lavorando su un sito WordPress ad alto traffico, l’unico consiglio valido che possiamo darvi è quello di non installare questi plugin.
Se proprio avete bisogno di una soluzione di sicurezza che si comporti come un WAF (Web Application Firewall) utilizzate lato sistemistico (e non come semplici plugin) soluzioni come NAXSI, o il più collaudato mod_security. Se invece volete utilizzare servizi in outsourcing, una versione commerciale da 20€ al mese di CloudFlare può essere sicuramente un buon punto di partenza per ottenere un servizio di Web Application Firewall WordPress senza andare ad appesantire il sistema ed evitando crash.