Proteggere l'accesso alla directory /administrator

Impedire l'accesso all'amministrazione del sito joomla!

accesso 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   

+1 #36 Mario 2022-02-07 15:47
Il codice php è valido per qualsiasi versione di php, (ora uso la 8), oppure ora è obsoleto e va aggiornato il codice? O in futuro?
Grazie!
Citazione
0 #35 paolo 2020-05-22 18:45
Citazione paolo:
Nonostante sono passati un po di anni da gli ultimi commenti ... la guida è perfetta..
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( 'allowAdminAccess', '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....



e infne proteggere la stessa cartella dello script con
.htaccess .htpasswd
Citazione
0 #34 paolo 2020-05-21 22:29
Nonostante sono passati un po di anni da gli ultimi commenti ... la guida è perfetta..
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....
Citazione
0 #33 Eugenio 2020-01-23 07:53
Salve,

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
Citazione
0 #32 Mariarosaria 2016-12-31 14:26
Ciao. Ho seguito la tua guida. Avevo già eseguito l'operazione diverse volte e ha sempre funzionato. Ho dovuto rifare il sito ex novo e adesso ho l'accesso sia tramite la cartella tradizionale che tramite cookie.
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
Citazione
+1 #31 Giuseppe 2016-01-12 14:19
Ciao.
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
Citazione
0 #30 Andrea 2016-01-10 19:05
Citazione Andrea:
Grazie per la guida.
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 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à.
Citazione
0 #29 Andrea 2016-01-08 00:24
Grazie per la guida.
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
Citazione
0 #28 Silvio 2015-09-23 09:23
Ciao, molto carina questa soluzione! complimenti!

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
Citazione
0 #27 Ettore 2015-08-30 21:22
Anzitutto grazie per lo script che uso su tutti i siti Joomla 2.5 e 3.
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
Citazione

Aggiungi commento

Please note: URL in text are not linked and user's site address is only for internal use and is not published.

Comments are human checked. All spam will be removed, so don't waste your time and, especially, mine!

Codice di sicurezza
Aggiorna