Proteggere l'accesso alla directory /administrator
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
Commenti
Grazie!
e infne proteggere la stessa cartella dello script con
.htaccess .htpasswd
Grazie.... il minimo che ti si possa dire ... la guida funziona alla grande .. è ho dat un po di sollievo ai log di sistema che non aumentano per tentativi estranei ...
Una domanda ....
if( setcookie( 'allowAdminAcce ss', 'valoreCookie', time()+60*60*1, '/' ) ){
posso inserire .. quello che voglio .. 'dog2020' o lasciarlo cosi ..cosa cambia .. al livello di funzionalita nulla... e di sicurezza ?
GRAZIE... di nuovo....
ho seguito la guida, ma ho un problema credo con l'istruzione:
RewriteCond %{REQUEST_URI} ^/administrator
Praticamente non mi blocca l'accesso all'admin.
Il redirect funziona egregiamente, ma mi aspettavo che digitando wwww.nomesito/a dministrator, non dovesse funzionare, e invece si riesce ad accedere tranquillamente.
Puo' essere dovuto alle impostazioni di redirect di https?
Grazie
Ho eliminato la cronologia la cache e quant'altro.
Quale potrebbe essere il problema?
Nel mio file .htaccess, non c'è scritto
RewriteEngine On, bensì:
## Mod_rewrite in use.
RewriteCond %{REQUEST_URI} ^/administrator
RewriteCond %{HTTP_COOKIE} !allowAdminAccess=mariarosaria
RewriteRule .* - [L,F]
Non ricordo se devo impostare qualche opzione da back end...
Grazie
Per prima cosa grazie e complimenti per queste info.
Ho applicato questo sistema e tutto funziona correttamente, se accedo al sito tramite indirizzo web miosito.it (per intenderci)
Viceversa se accedo con indirizzo "diretto" che mi fornisce hosting accedo direttamente.
Questo perchè ora esiste anche la cartella dove c'è l'installazione di joomla.
Infatti modificando il file.htacces aggiungendo \cartellaIstall azJoomla\admini strator
l'area è di nuovo protetta.
Quindi è meglio inserire entrambi i perxorsi nel file .htacces?
===Risposta
ciao Giuseppe,
da quanto capisco hai usato l'installer di applicazioni del provider, il quale installa l'applicazione, joomla nel nostro caso, in una subdir.
in tal caso ci sarà già un .htacess nella root 'vera' del sito che effettua la riscrittura delle richieste perché siano rimappate per la directory di installazione: ne consegue che il sito è raggiungibile con due url, ovvero con e senza directory.
premesso che ritengo questo modo di installare le applicazioni assolutamente sbagliato, è corretta la tua idea di inserire entrambi gli url nella regola di filtro.
ciao,
marco
Ho cancellato i cookies dal browser del cellulare (chrome sincronizzato con quello de pc) ed ora funziona perfettamente.
Grazie ancora per la preziosa guida e per la disponibilità.
L'ho applicata a 3 siti e funziona perfettamente.
In un sito Joomla 3.4.8 (Responsive) accade una cosa strana, da cellulare accedendo a www.miodominio/administrator accede al pannello di joomla senza creare la pagina "Forbidden".
Da pc funziona perfettamente.
===Risposta
ciao Andrea,
la cosa mi suona abbastanza strana, dato che il comportamento del sistema dipende dal server e non da altri fattori.
ciò che mi viene in mente, è che tu abbia un browser sul cellulare che è sincronizzato anche a livello di cookies con quello del pc.
(prova a cancellare i cookies dai due browsers e riaccedere con il cellulare)
ciao,
marco
Ho però un contrattempo:
Su Joomla 3 (che ho su altervista) alla fine di certe operazioni ottengo una pagina di errore 403.
Ad esempio dopo che metto UN e PW per l'accesso al back-end (qui mi è sufficente tornare alla pagina precedente per visualizzare il back-end di Joomla)-
Oppure dopo aver cercato di caricare un file nella cartella images attraverso il pannello "media" (e qui non c'è nulla da fare, il file non si carica).
Soluzioni?
===Risposta
altervista gratuito? suppongo vi sia un sistema di caching delle risposte per minimizzare il carico sui server, in tal caso, oltre a provare ad inserire istruzioni nell'header della risposta per evitare il caching, l'unica è un altro hosting che non abbia queste limitazioni.
bisognerebbe fare dei test.
ciao
Chiedo: lo script funziona anche con Joomla 1.5.x......????
Grazie!
====Risposta:
Ciao Ettore,
sì, funziona anche con j1.5.
L'alta efficacia e sicurezza di questo tipo di protezione è dovuta proprio all'indipendenz a dal cms in uso: basandosi solo sui meccanismi di apache funziona con qualsiasi cms ed interviene prima dell'accesso al cms stesso.
ciao,
marco
RSS feed dei commenti di questo post.