Impedire l'accesso all'amministrazione del sito joomla!
Questo articolo è specifico per i siti in Joomla! e si applica a qualsiasi versione dalla 1.x alle ultime 3, ma la metodologia descritta si può applicare facilmente a qualsiasi CMS la cui interfaccia di amministrazione si trovi in una sottodirectory e può essere anche adattata a proteggere una singola pagina.
Non sono richieste grandi conoscenze per applicare quanto descritto qui, è sufficiente solo un poco di esperienza.
La protezione qui descritta funziona per gli applicativi PHP su server Apache e richiede la modifica al file .htaccess e la redazione di un piccolo files php.
Scrissi questo articolo qualche anno fa, nel 2010, giusto come spunto tecnologico, ma senza consigliare l'adozione di questa tecnologia con troppa insistenza. Attualmente i tentativi di accesso al sito tramite attacchi all'interfaccia di amministrazione, per trovare le password, stanno diventando frequenti ed insistenti: ho pertanto deciso di aggiornare l'articolo e vi consiglio caldamente di implementare questa protezione.
Per prima cosa bloccheremo l'accesso diretto alla directory /administrator che consente l'amministrazione del nostro sito Joomla! inserendo queste righe nel file .htaccess, subito dopo la direttiva RewriteEngine On:
RewriteCond %{REQUEST_URI} ^/administrator
RewriteCond %{HTTP_COOKIE} !allowAdminAccess=valoreCookie
RewriteRule .* - [L,F]
La prima riga controlla che l'URI richiesto inizi con /administrator, che è la directory che vogliamo proteggere, la seconda riga verifica che non esista il cookie di nome allowAdminAccess o che lo stesso non abbia il valore valoreCookie; se entrambe le condizioni sono verificate l'ultima riga forza il webserver a fermare l'esecuzione (L) e a restituire l'errore forbidden (F). in altri termini: se si vuole accedere ad /administrator deve esserci il cookie allowAdminAccess con il valore valoreCookie.
Ma come si imposta il cookie in questione? Con un semplice script php che "nasconderemo" da qualche parte nel sito. Creiamo, ad esempio, la directory /protect ed al suo interno il file protect.php. Il contenuto del files sarà il seguente:
<?php
if( setcookie( 'allowAdminAccess', 'valoreCookie', time()+60*60*1, '/' ) ){
header('Location: /administrator');
}else{
echo 'Errore nel salvare il cookie';
}
?>
Non inserite spazi all'inizio del file prima del codice PHP, e, se usate un editor windows, assicuratevi di salvare il file senza BOM (byte order model).
Quando richiamerete lo script, questi creerà il cookie allowAdminAccess e gli assegnerà il valore valoreCookie con validità di una ora; se volete aumentare il tempo a vostra dispozione, vi basterà aumentare il valore dell'ultimo moltiplicatore: ogni unità corrisponde ad una ora. Se lavorate molto sull'amministrazione del sito è consigliabile impostare la durata del cookie a valori più alti di una ora, considerate quattro/otto ore come valore opportuno.
Una volta impostato il cookie, lo script reindirizzerà il browser alla directory /administrator, da cui avviene la gestione del sito. A questo punto l'accesso sarà consentito.
Quindi, da ora, per accedere alla amministrazione del sito, si dovrà richiamare lo script appena creato (e fatelo sempre!):
http://www.miosito.tld/protect/protect.php
e ci si troverà di fronte all'interfaccia di amministrazione.
Usate sempre questo indirizzo per accedere all'amministrazione del sito: così prorogherete la validità del cookie e non correrete il rischio che la sessione vi si chiuda mentre lavorate.
Ovviamente sarà opportuno cambiare il nome del file php e il nome e/o il valore del cookie (sia nel file php che in .htaccess)
Usare un plugin già pronto?
Esistono dei plugin che permettono di ottenere lo stesso risultato qui descritto: perché non usarli? Ovviamente non vi è un motivo per non farlo, ma possono esserci delle ragioni per implementare la soluzione qui descritta:
- non è riconducibile ad uno schema fisso;
potendo, o meglio dovendo, cambiare il nome/percorso del file, il nome del cookie ed il suo valore un hacker dovrà faticare non poco a capire che succede. - indipendenza dal CMS in uso:
La protezione è basata sul meccanismo di controllo di Apache, e quindi è indipendente dal CMS; nessuna vulnerabilità del CMS può far sì che questo sistema di protezione non funzioni! - è molto resistente agli attacchi dos e ddos:
non dovendo passare da joomla (php e mysql) assorbe molto meno risorse di sistema e quindi può gestire un elevato numero di attacchi. - possibilità di rapido intervento in caso di problemi:
basterà commentare le regole in .htaccess per disattivare la protezione. avendo provveduto voi all'installazione saprete sicuramente intervenire rapidamente in caso di blocchi, senza aspettare assistenza da nessuno. - è educativo:
vi permette di imparare a conoscere meglio il vostro sito, il che non è mai una perdita di tempo.
Maggiori informazioni su mod_rewrite le potete trovare, oltre che sul sito ufficiale di apache, anche in questo nostro articolo scritto per la comunità di Joomla! Italia: modificare gli url in htaccess con le funzioni di modrewrite.
Perché bloccare l'accesso alla directory /administrator
Sappiate che gli attacchi alla interfaccia di amministrazione di joomla stanno diventando sempre più frequenti, ed una soluzione come questa può evitarvi molti problemi ed anche parecchi costi di banda e di cpu. Invece, per quanto riguarda la protezione della parte pubblica del sito, vi consigliamo il nostro plugin di sicurezza pubblicato su questo stesso sito.
Se avete problemi di sicurezza contattateci, anche questo è uno dei nostri servizi. Intanto aggiungete questa economica, ma assai efficace, protezione al sito.
happy coding,
marco maria leoni