
Mettere in sicurezza un sito Joomla si fa in poco tempo, molto meno di quanto si pensi. Non serve essere sistemisti né installare estensioni a pagamento: quasi tutto quello che segue si fa con gli strumenti già presenti in Joomla e con qualche riga nel file .htaccess. Le voci di menu sono quelle di Joomla 5 e 6 in italiano, ma gran parte dei consigli vale anche per Joomla 4.
Una premessa: nessuna di queste misure rende un sito inattaccabile. Servono a togliere di mezzo gli attacchi automatici, che sono la stragrande maggioranza, e a rendere la vita difficile a chi prova a entrare dalla porta principale.
Prima di toccare qualsiasi cosa: backup
Sembra banale, ma è il passo che si salta più spesso. Prima di modificare configurazione e .htaccess conviene fare una copia completa del sito, file e database, con Akeeba Backup o con lo strumento del proprio hosting, e scaricarla sul computer. Se qualcosa va storto, si torna indietro in cinque minuti invece di passare la serata a capire cosa si è rotto.
Aggiornamenti ed estensioni inutili
La maggior parte dei siti Joomla bucati non viene violata per colpa di Joomla, ma di un'estensione vecchia mai aggiornata. Due cose da fare subito:
- da Sistema > Aggiornamento portare Joomla e tutte le estensioni all'ultima versione, e lasciare attiva l'attività Notifica di aggiornamento di Joomla, che manda una mail quando esce una nuova versione;
- da Sistema > Gestione estensioni disinstallare tutto quello che non si usa più. Un'estensione disattivata ma installata resta sul server con i suoi file, e se ha una vulnerabilità può essere sfruttata lo stesso.
Vale soprattutto per i template: quando si cambia template, quello vecchio e l'eventuale framework su cui si appoggiava restano installati finché non li si rimuove a mano, spesso con un piccolo gruppo di plugin e moduli collegati.
Anche per quello che resta vale la pena di fare un controllo: un'estensione che non riceve aggiornamenti da anni, o che non dichiara la compatibilità con la versione di Joomla in uso, è un rischio anche se funziona ancora. Quando esce una falla, nessuno la correggerà. Meglio sostituirla con un'alternativa mantenuta, cercandola sulla Joomla! Extensions Directory o sul sito dello sviluppatore, dove si vedono data dell'ultima versione e compatibilità. E mai installare versioni "crackate" di estensioni a pagamento scaricate da siti non ufficiali: sono uno dei modi più comuni per ritrovarsi una backdoor nel sito.
L'accesso all'amministrazione
È la porta principale, ed è quella che i bot provano di continuo con liste di password. Qui conviene mettere più di una serratura.
Autenticazione a più fattori. Da Joomla 4.2 è integrata nel core e non richiede estensioni. Si attiva dal proprio profilo utente, nella scheda Autenticazione a più fattori, scegliendo uno dei metodi disponibili: Codice di verifica (il classico codice a sei cifre di Google Authenticator, Microsoft Authenticator e simili), Passkey, YubiKey o il codice ricevuto via email (c'è anche un "Codice fisso", ma è solo dimostrativo e non va usato). Per la maggior parte dei siti il codice di verifica con un'app sul telefono è la scelta più semplice. Alla prima attivazione Joomla genera anche dei codici di backup da usare se si perde il telefono: vanno stampati o salvati in un posto sicuro, non sul server.
Nelle Opzioni di Utenti, alla voce Forza l'autenticazione a più fattori, si può renderla obbligatoria per i gruppi che accedono al pannello, almeno per il gruppo Super Users: così nessun account amministratore resta protetto dalla sola password.
Una seconda password davanti a /administrator. Quasi tutti gli hosting permettono di proteggere una cartella con nome utente e password dal pannello di controllo (è la protezione con file .htpasswd). Prima ancora di vedere la pagina di login di Joomla il browser chiede una password del server: i bot che cercano /administrator trovano un errore 401 e passano oltre. Unico accorgimento: usare credenziali diverse da quelle di Joomla.
Il resto è buon senso: un nome utente amministratore che non sia "admin", password lunghe e diverse per ogni account, e un solo Super Utente se si gestisce il sito da soli.
HTTPS ovunque e HSTS
Oggi il certificato SSL è incluso in praticamente ogni hosting, ma non basta averlo: il sito deve usarlo sempre. In Configurazione globale > Server l'opzione Forza HTTPS va impostata su Tutto il sito.
Il passo successivo è l'intestazione HSTS (Strict-Transport-Security), che dice al browser di non provare mai più a collegarsi al sito in http, nemmeno se qualcuno clicca un vecchio link. In Joomla c'è già il plugin che serve: Sistema - Header HTTP. Nelle sue opzioni si attiva HSTS e si imposta il max-age, cioè per quanto tempo il browser deve ricordarsi la regola.
Conviene partire con un valore basso, 300 secondi, controllare per un giorno che tutto funzioni, e poi passare a 31536000 (un anno). Le opzioni Anche per sottodomini e Precaricamento vanno lasciate spente, a meno di essere sicuri che tutti i sottodomini, compresi quelli dimenticati, rispondano in https: tornare indietro dal precaricamento richiede mesi.
Lo stesso plugin, con le impostazioni predefinite, aggiunge anche altre intestazioni utili (X-Frame-Options, Referrer-Policy, Cross-Origin-Opener-Policy) che proteggono da clickjacking e simili. C'è anche la Content Security Policy, la più potente ma anche la più delicata: se si sbaglia, smettono di funzionare banner dei cookie, video incorporati e pubblicità. Se si vuole provare, va usata prima in modalità Solo-Report per qualche giorno.
Dare meno informazioni ai curiosi
I bot non attaccano a caso: prima cercano di capire quale versione di Joomla gira sul sito, poi provano le vulnerabilità note per quella versione. Meno informazioni trovano, meglio è.
Rapporto errori su Nessuno. In Configurazione globale > Server, sul sito online Rapporto errori deve essere su Nessuno: i messaggi di errore PHP mostrano percorsi e dettagli del server che non devono finire sotto gli occhi di nessuno.
Il meta generator. Joomla scrive nel codice di ogni pagina <meta name="generator" content="Joomla! - Open Source Content Management">. Non rivela la versione, ma dice a tutti che il sito usa Joomla. Si toglie con una riga nell'index.php del template (meglio in un template figlio, per non perderla agli aggiornamenti):
$this->setGenerator('');
I file che rivelano la versione. Questo è il punto che pochi conoscono. Nella cartella di Joomla ci sono file come README.txt e i file .xml delle lingue e delle estensioni che chiunque può aprire dal browser, e alcuni contengono il numero di versione esatto. Si bloccano aggiungendo al file .htaccess queste righe:
<IfModule mod_authz_core.c>
<FilesMatch "^(README\.txt|LICENSE\.txt|htaccess\.txt|web\.config\.txt|configuration\.php-dist)$">
Require all denied
</FilesMatch>
</IfModule>
e, subito dopo la riga RewriteEngine On già presente nel file:
RewriteRule "^(administrator/|api/)?(components|language|manifests|modules|plugins|templates)/.+\.xml$" - [F,L]
La regola copre anche le cartelle administrator e api, che hanno gli stessi file: il più rivelatore è administrator/manifests/files/joomla.xml, che contiene la versione esatta di Joomla. Joomla legge questi file direttamente dal disco, quindi bloccarli dal browser non cambia nulla nel funzionamento del sito. Per controllare che la regola funzioni basta aprire nel browser l'indirizzo del sito seguito da /language/it-IT/langmetadata.xml: deve comparire un errore 403.
Il .htaccess è un file delicato: un errore di battitura e il sito risponde con un errore 500. Prima di modificarlo conviene scaricarne una copia, e dopo il caricamento controllare subito che le pagine si aprano normalmente. Un dettaglio che fa perdere più tempo del previsto: se il file viene salvato con un editor che aggiunge il BOM (succede con alcuni editor di Windows), Apache può rifiutarlo. Meglio salvarlo in UTF-8 senza BOM.
Se il sito non ha ancora un .htaccess, Joomla ne include uno pronto: è il file htaccess.txt nella cartella principale, che va rinominato in .htaccess.
Altre due impostazioni da controllare
Se sul sito non serve che i visitatori si registrino, nelle Opzioni di Utenti Consenti registrazione utenti va messo su No: un modulo di registrazione aperto e inutilizzato attira solo spam e account falsi.
Conviene poi verificare che il plugin Sistema - Log delle Azioni Utente sia attivo: registra accessi e modifiche fatte nel pannello, e se un giorno succede qualcosa di strano è il primo posto dove guardare.
Il controllo finale
Finito il lavoro, ci sono due verifiche veloci. La prima è aprire il sito da una finestra anonima del browser e girare un po' tra le pagine, per essere sicuri che tutto funzioni come prima. La seconda è passare l'indirizzo all'HTTP Observatory di Mozilla, che analizza le intestazioni di sicurezza e dà un voto con i suggerimenti per migliorare.
Da lì in avanti la sicurezza è soprattutto abitudine: aggiornare quando arriva la mail di Joomla, fare un backup prima di ogni modifica importante e ogni tanto dare un'occhiata al log delle azioni.