Proteggere l'accesso alla directory /administrator
Impedire l'accesso all'amministrazione del sito
Questo articolo è specifico per i siti in Joomla!, ma la metodologia descritta si può applicare facilmente a qualsiasi CMS la cui interfaccia di amministrazione si trovi in una sottodirectory del dominio 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.
Per prima bloccheremo l'accesso diretto alla directory /administrator che consente l'amministrazione del sito inserendo queste righe nel file .htaccess,
subito dopo la direttiva RewriteEngine On:
RewriteCond %{REQUEST_URI} ^/administrator
RewriteCond %{HTTP_COOKIE} !allowAdminAccess=mioCookie
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 mioCookie; 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 mioCookie.
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', 'mioCookie', time()+60*60, '/' ) ){
header('Location: /administrator');
}else{
echo 'Errore nel salvare il cookie';
}
?>
Nota Importante: non inserite spazi all'inizio del file prima del codice PHP.
Lo script crea il cookie allowAdminAccess con il valore mioCookie e con validità di una ora, dopo di che rimanda il browser alla directory da cui avviene la gestione del sito, a questo punto l'accesso sarà consentito: basterà passare per lo script appena creato:
http://www.miosito.tld/protect/protect.php
e ci si troverà di fronte all'interfaccia di amministrazione.
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)
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! - 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.
Ricordate sempre che la maggior parte degli attacchi è rivolta alla parte pubblica del sito, almeno per quanto riguarda i cms Open Source, ma una protezione in più di sicuro non farà male; per quanto riguarda la protezione della parte pubblica del sito vi consigliamo il plugin pubblicato su questo stesso sito.

Commenti
Ritiro la domanda, ho detto una castroneria
Potrebbe essere utile mettere invece un Disallow: /nomecartella nel robots.txt?
trovo quest'articolo ottimo ed educativo.
Una cosa che non riesco a capire è la gestione dell'errore 404. Ho personalizzato la mia pagina, se scrivo provasito/pippo mi appare la 404 che ho personalizzato se invece digito provasito/admin istrator la pagina è generica solo te testo html.
Posso controllare la cosa? Grazie.
dovrebbe essere chiuso l'ingresso tramite
www.miosito.it/administrator
io invece continuo a poter accedere da qui
=== Risposta
sì, hai capito bene. sicuro che .htaccess sia processato dal server?
ho seguito i tuoi preziosi consigli e funziona tutto bene. Solo un dubbio: la nuova directory che ho creato, dove ho posizionato il file php, verrà indicizzata da Google?
===Risposta
ciao beppe,
se non metti un link in home page no. :) ovviamente scherzo, l'esistenza di questa directory non va rivelato a nessuno e di conseguenza NON deve esserci alcun link presente sul sito. i motori seguono i link, quindi non la indicizzeranno.
NON metterla nel file robots, mi raccomando.
ciao,
marco
Non blocca l'accesso.
Ho Joomla in in una sotto directory, es. www.miodomino.tld/joomla/
Il file .htaccess che ho modificato è quello generato da joomla nella sua directory.
=== Risposta
non basta che il file .htaccess sia presente, è necessario che sia processato da apache. un modo rapido di verificare è controllare se funziona la riscrittura degli url e i percorsi SEF sono gestiti correttamente.
ciao,
marco
RSS feed dei commenti di questo post.