>> Torna all'Homepage <<
Contattaci Entra nei forum Cerca nel sito
News della settimana ASP: esempi di pagine dinamiche Trucchi e suggerimenti per il PC Manuali e guide I dossier e gli approfondimenti di AmicoPc Il sito della settimana I racconti di Armando Staffa Chi siamo
     
 

 


Guarda il sistema
in funzione

 

 


GESTIONE UTENTI: PROBLEMI DI SICUREZZA

Nelle scorse settimane abbiamo analizzato come creare e gestire un sistema che permetta di proteggere determinate pagine asp consentendone la visualizzazione solo ad utenti registrati, quindi in possesso di username e password valide.
In questo modo gli utenti sono invitati a registrarsi selezionando username e password: dati che vengono inseriti in un database.
Quando si cerca di visualizzare una pagina protetta viene richiesto il nome utente e la password, senza dei quali non dovrebbe essere possibile accedere all'area riservata.
Il procedimento è stato spiegato nell'esempio chiamato Registrazione degli utenti, disponibile all'indirizzo http://www.amicopc.com/asp/register.asp

Se però il codice di queste pagine non è scritto correttamente c'è la possibilità di entrare nella sezione riservata anche senza conoscere nome utente o password.
Anzi: se noi conosciamo il nome di un utente, prenderemo il suo posto, anche se non ne conosciamo la password.
Il tutto per colpa di un apostrofo...

Immaginiamo le conseguenze di una situazione simile: se creo delle sezioni riservata significa che, per qualche motivo, desidero che le informazioni in esse contenute siano visibili solo a determinate persone. La prima conseguenza è quindi la possibilità, per utenti non autorizzati, di visualizzare informazioni altrimenti riservate.
Questo può essere già un problema.

In secondo luogo occorre ricordare che in fase di registrazione vengono richiesti molti dati, tra cui nome, cognome, indirizzo reale, data di nascita, numero di telefono.... molte volte anche codice fiscale o altri dati sensibili. Un sistema di gestione ben fatto deve consentire al'utente di modificare tali dati facilmente: quindi l'utente inserendo il proprio nome utente e password ottiene l'accesso ad un pannello di controllo in cui sono visualizzati i dati inseriti al momento della registrazione, dandogli così la possibilità di modificarli.
Tutto bene se questi dati sono visibili solo da parte dell'utente autorizzato: se un'altra persona avesse accesso a questi dati sarebbe quantomeno fastidioso (questi infatti saprebbe tutto di me...). Con il sistema che andremo a vedere in queste pagine è possibile loggarsi (ovvero autenticarsi) al posto di un determinato utente, ottenendo così il permesso di visualizzare dati personali, modificare la password, gestire le operazioni a lui riservate...

Vediamo innanzitutto il metodo comunemente utilizzato per proteggere una pagina asp.

REGISTRAZIONE
Per prima cosa l'utente deve registrarsi, inserendo i dati richiesti. Tra questi dovrà scegliere un nome utente e password: informazioni che vengono registrate in un database in due campi che per convenzione possiamo chiamare user e pwd.

CHECK.ASP
Per entrare nella sezione riservata occorre inserire username e password in un modulo. Cliccando sull'apposito pulsante questi dati vengono inviati ad una pagina che controlla se l'accoppiata username-pwd esiste nel database. Se c'è creea quindi la session e reindirizza l'utente verso la pagina riservata.
Se la pagina in questione non trova lo username o la password l'utente viene reindirizzato verso una pagina di errore.
Il codice di questa pagina può essere simile al seguente:

<%
user=request.form("user")
pwd=request.form("pwd")

Per prima cosa prendo il nome utente e la password inseriti nel modulo. Quindi creo la connessione con il database e preparo il recordset che dovrà contenere i miei dati.

Dim Conn
Set Conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & server.mappath("pwd.mdb")
Dim rs
Set rs = Server.CreateObject("ADODB.Recordset")

Ora preparo la stringa di selezione, chiedendo di selezionare dalla tabella pwd il record il cui campo user corrisponde al nome utente inserito nel modulo e dove il campo pwd corrisponde alla password inserita.
La satringa utilizzata consente di avere anche più utenti con lo stesso username: infatti io chiedo di trovare il record con una determinata coppia di username e password. Non mi interessa se esistono più utenti omonimi: a me interessa che ci sia almeno un utente con quel nome utente e quella password.

rs.Open "select * from pwd where user like '"& user &"' and pwd like '"& pwd &"'", conn

Se il cursore arriva in fondo al file senza trovare nessuna corrispondenza (if rs.eof) significa che non esiste nessun record con quell'accoppiata username-password.
Pertanto chiudo connessione e recordset e reindirizzo l'utente verso una pagina di errore.

if rs.eof then
rs.close
set rs=nothing
conn.close
set conn=nothing
response.redirect "accesso_negato.htm"

Se il cursore non arriva alla fine del file (else...) significa che l'utente esiste e che quindi può entrare.
Creo quindi la session sbagliato (teoricamente dovrebbe chiamarsi autenticato: in realtà la chiamiamo sbagliato per distinguerla da quella che andremo a creare successivamente con il sistema corretto, che invece chiameremo giusto. In questo caso la pagina protetta dovrà controllare se esiste la session sbagliato-giusto e non più la session autenticato!)
Inoltre creiamo anche una session che chiamiamo utente in cui memorizziamo il nome dell'utente: in questo modo tutte le pagine che andremo a visitare potranno sapere quale utente le sta visualizzando, in modo da regolarsi di conseguenza.
Quindi indirizziamo l'utente verso la prima pagina della sezione riservata.

else
session("sbagliato")="si"
session("utente")=rs("user")
rs.close
set rs=nothing
conn.close
set conn=nothing
response.redirect "prima.asp"
end if
%>

PAGINA PROTETTA
Quando l'utente inserisce il proprio username e password viene creato un oggetto session (che qui possiamo chiamare autenticato) che certifica che l'utente ha inserito lo username e la password corretti e qundi è autorizzato ad entrare nella sezione riservata.
Quindi la pagina protetta dovrà controllare semplicemente se esiste questa session. Se essa non esiste significa che l'utente non si è autenticato, quindi viene indirizzato verso una pagina di errore.
Il metodo generalmente utilizzato può essere

<% if session("autenticato")<>"ok" then response.redirect "accesso_negato.htm" %>

La pagina in questione dovrò poi prendere il nome dell'utente memorizzato nella session utente: in questo modo può sapere quale utente sta visualizzando la pagina e mostrargli quindi solo le informazioni che ha diritto di vedere.

Il sistema appena descritto è disponibile online all'indirizzo http://www.amicopc.com/test/pwd/index.htm, utilizzando il modulo chiamato SBAGLIATO.
Gli utenti presenti in database sono i seguenti:

USERNAME
PASSWORD
primo
001
secondo
002
terzo
003
quarto
004
quinto
005
sesto
006
settimo
007
ottavo
008
nono
009
decimo
010

Quindi per accedere alla pagina riservata bisogna utilizzare una di queste combinazioni: se si provasse ad entrare con la combinazione primo e 009 verrebbe visualizzata unicamente la pagina di errore.
Inoltre anche cercando di visualizzare direttamente la pagina prima.asp (evitando quindi la pagina index.htm con il modulo di richiesta nome e password) si ottiene solo un pagina di errore che invita l'utente ad autenticarsi.

Sembrerebbe quindi che abbiamo raggiunto il nostro scopo: la pagina è visibile solo dagli utenti registrati e se non si conosce l'accoppiata nome utente e password non si è in grado di visualizzare la pagina.

Ma è davvero così? Siamo sicuri che non esiste un modo per entrare anche senza conoscere username o password?

 

Insieme per un mondo migliore

Utenti connessi: 28

Invia questa pagina ad un amico

 

 

 

Chi siamo | Pubblicità | Note sulla privacy | Dicono di noi
Grafica cura di Paolo Omero
- Stefania Migliorucci

La riviera delle azalee