Creare aree ad accesso riservato con CGI
CGI consente di creare aree di accesso riservato all'interno di siti web in diversi modi, questo articolo descriverà le procedure relative a pagine protette da sistema di autenticazione HTTP e da semplice sessione di login.
In pratica una richiesta di autenticazione HTTP funziona grazie all'interazione tra server e client sulla base delle richieste inviate dagli utenti tramite browser internet:
- Il programma di navigazione effettua la richiesta di una risorsa attraverso la digitazione di una URL.
- Dato che la pagina contenente la risorsa è riservata, il server a sua invierà all'utente una richiesta di autenticazione necessaria perchè sia autorizzato all'accesso.
- Il browser mostra all'utente un'interfaccia (prompt) che tipicamente sarà costituita da un modulo all'interno del quale inserire le proprie credenziali d'accesso: unsername e password.
- Il browser invia al server una nuova richiesta di autorizzazione, questa volta completa di nome utente e relativa parola chiave che generalmente subisce un processo di criptaggio.
- I dati inviati vengono raccolti dal server e quindi validati; nel caso in cui le credenziali fornite dall'utente siano sufficienti e corrette sarà messa a disposizione in output la risorsa richiesta.
I dati richiesti per l'accesso possono essere validi per tutta la "gerarchia" interna alla directory contenente la risorsa richiesta (cartelle, sotto-cartelle e file) ma è possibile richiedere ulteriori autorizzazioni. Ciò accade nel caso diversi utenti siano destinati ad accedere a risorse differenti e solo a quelle.
Uno dei metodi per richiedere autorizzazioni tramite headers ("intestazioni") HTTP è quello di utilizzare un file .htaccess per la protezione dell'area che si intende riservare soltanto a determinati utenti. Ecco un esempio di come potrebbe essere scritto un file di questo tipo:
AuthType Basic AuthName "Area riservata" AuthUserFile /usr/home/mrw/htpasswd AuthGroupFile /usr/home/mrw/htgroup require valid-userIn pratica dovranno essere indicati nel documento i seguenti parametri: il tipo di autenticazione richiesta, il percorso al file contenente le password di autenticazione (criptate) e il percorso al file relativo ai gruppi con privilegi di accesso.
Non sempre si ha però la possibilità di utilizzare i file .htaccess, il motore del server potrebbe non essere configurato per accettarli o l'accesso ai contenuti del sito potrebbe essere limitato per questioni di sicurezza.
E' comunque possibile ottenere un risultato molto simile utilizzando uno script CGI da creare utilizzando poche righe di codice:
void CGI::authenticate
(
const char* authtype,
const char* realm,
void callback (const int) = 0
)
const
{
cout << "Status: 401 Autenticazione richiesta\n"
"WWW-Authenticate: " << authtype <<";
realm=" << realm << "\n" ;
if (callback) callback(401) ;
else cout <<
"Content-type: text/plain\n"
"\nPer accedere alla risorsa sono necessari user e pass." ;
exit(0) ;
}
Come è facile notare, anche in questo caso viene indicata innanzitutto la tipologia di autenticazione; inizialmente la pagina che permette l'accesso alla risorsa entra in "status 401" (Authentication Required) per negare l'accesso immediato; quindi l'utente viene informato del fatto che per autenticarsi avrà bisogno di inserire nel prompt i dati corretti.
Se non si desidera utilizzare un sistema di autenticazione così raffinato come quello basato sugli header HTTP, CGI permette comunque di creare anche semplici file contenenti tutti i dati necessari per l'autenticazione:
use CGI;
use CGI::Session;
use CGI::Session::Auth;
#istanza degli oggetti relativi alle intestazioni
my $cgi = new CGI;
#definizione dell'oggetto relativo alla sessione
my $sessione = new CGI::Session(undef, $cgi,
{Directory=>'/tmp'});
#definizione dell'oggetto relativo all'autenticazione
my $auth = new CGI::Session::Auth({
CGI => $cgi, Session => $session
});
$auth->authenticate();
#controllo dello stato dell'autenticazione
if ($auth->loggedIn)
{
showSecretPage;
}else{
showLoginPage;
}
Lo script appena proposto, si basa sulla classe Perl "CGI::Session::Auth" creata appositamente per le procedure di autenticazione in CGI.







