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   

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
0 #26 Carmelo 2015-08-22 13:25
ciao, putroppo non riesco a farlo funzionare ..ho seguito tutto alla lettera.
Un aiuto me lo potresti dare? Grazie mille

===Risposta
ciao Carmelo,
non saprei che dire, a parte di verificare che l'.htaccess sia processato e che il codice in esso si trovi all'inizio del file.
per il resto prova a inserire il codice così come è e solo dopo aver verificato il funzionamento procedi a cambiare il nome di file/variabili/ valori. se così non funziona magari il problema è sul server e conviene chiedere all'assistenza.
Citazione
0 #25 Paolo 2015-06-08 15:17
Risolto: bastava aggiungere /index.php alla riga:
header('Location: /administrator/ index.php');
Citazione
0 #24 Paolo 2015-06-08 14:56
Ciao, innanzitutto, grazie mille per questo articolo!
Ho inserito questa modifica su di una decina di siti e funziona perfettamente, ho un solo sito che mi da problemi, e ho individuato la riga che interferisce sul file .htaccess:
DirectoryIndex index.html
se la tolgo funziona correttamente, ma mi serve per far partire il sito da una pagina html, come posso modificare per far rimanere questa riga?
Grazie per l'aiuto.
Citazione
0 #23 Gianni 2015-03-08 18:45
OTTIMO!!! L'ho appena provato su uno dei miei siti e funziona a meraviglia. Grazie
Citazione
0 #22 luigirooss 2015-02-09 17:23
Citazione luigirooss:
Ciao! Io ho provato in locale a modificare il file .htaccess, ma niente, la cartella administrator rimane sempre accessibile! Cosa potrei fare per risolvere il problema?

Ops, come non detto: il problema stava in apache che non gestiva i file .htaccess. Ho impostato allowoverride su All e tutto va adesso :)
Citazione
0 #21 luigirooss 2015-02-09 14:25
Ciao! Io ho provato in locale a modificare il file .htaccess, ma niente, la cartella administrator rimane sempre accessibile! Cosa potrei fare per risolvere il problema?
Citazione
0 #20 marco 2015-01-27 14:23
Ciao, stavo smadonnando perchè mi creava il cookie, ma poi mi dava forbidden..
poi ho scoperto che non voleva il ! (punto esclamativo) nel valore del cookie..

Magari può servire a qualcuno :)

====Risposta
il ! davanti al nome del cookie (non nel valore) è l'operatore di negazione di mod_rewrite e vale NOT...
quindi non è parte del nome del cookie
Citazione
0 #19 Ettore 2015-01-23 12:01
Grazie Marco per questo utilissimo tutorial.
Al momento tutto funziona come dovrebbe.

Ho un unico dubbio: questa modifica al file .htaccess (e l'aggiunta della cartella conil file PHP all'interno), potranno creare problemi in caso di ripristino del sito utilizzando un backup di Akeeba e l'apposito kickstart.php?

Grazie!

ettore

===Risposta
ciao Ettore,
nessun problema con akeeba. la modifica riguarda le richieste http, non ciò che può fare php da /installation

ciao,
marco
Citazione
0 #18 green12 2014-12-10 15:52
ciao,
ho già applicato la protezione su diversi siti ma ho un sito in una directory e quindi il file htaccess non è in root , come modifico le righe sotto il RewriteEngine On?
grazie

===Risposta
ciao, modifichi semplicemente le path in .htaccess con il percorso completo, se non funzionano così come sono.
devi provare, perché potrebbe dipendere da come è configurato il server.
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

L'estate si avvicina hai già trovato l'albergo per le vacanze? cerca un albergo al mare o un hotel in montagna ove trascorrere le tue vacanze.