Newsgroup: it.comp.www.php
Titolo: e' abbastanza sicura come soluzione?

Allora, nel sito che sto realizzando c'è la classica pagina di login con
userid e password.
Ora per facilitare gli utenti e non chiedere tutte le volte di digitare i
due dati sto inserendo i cookie, ovvero tengo traccia del fatto che l'utente
si è loggato mettendo un cookie sul computer dell'utente (se permesso
ovviamente).
Anche se nel sito non sono gestiti dati di fondamentale importanza, ma solo
un indirizzo email e poco altro, volevo cmq implementare un meccanismo
abbastanza sicuro, se non per il sito in se, come esercizio.
Quindi ho pensato che mettere nel cookie solo l'id dell'utente (id con cui
l'utente si è iscritto al sito stesso) è di fatto una soluzione molto poco
sicura, perchè un altro utente (abbastanza pratico), potrebbe crearsi un
cookie ad ok ed inserire un numerillo a caso come dato, andando di fatto ad
impersonare un altro utente.
Quindi mi son detto, ci vuole qualcosa di univoco. Ho pensato perciò di fare
una cosa del genere
1. l'utente fa login con userid e pass
2. se la verifica (l'utente è iscritto) ha successo:
2.1) inizializzo la sessione con i dati che mi servono nella navigazione del
sito
2.2) memorizzo un cookie sul computer dell'utente con una stringa formata da
ID+timestamp+un codice casuale di X caratteri alfanumerici criptata con MD5
2.3) memorizzo in una tabella nel mio database la stessa stringa
2.4) faccio accedere l'utente alla sezione riservata
3) se l'utente fa logout distruggo la sessione e il cookie
4) se l'utente torna sul sito senza aver fatto logout la volta precedente:
4.1) controllo l'esistenza del cookie. Se il cookie esiste
4.1.1)leggo dal cookie la stringa criptata e la cerco nel database. Se
esiste proseguo come utente registrato e vado a recuperare gli altri dati
che mi servono per la navigazione.
Ovviamente a questo punto serve anche un meccanismo per cancellare dal
database le "sessioni" scadute. Per far questo penso basti una funzione php
che venga richiamata ad ogni caricamento della home del sito, in cui
controllo se il timestamp è anteriore di X secondi al timestamp attuale ed
eventualmente cancello il record.
Può essere discretamente sicuro un metodo come questo?
C'è magari qualche soluzione migliore (senza andare a scomodare ssl e
company che non ne vale la pena visto il target del sito)?
grazie per l'attenzione, riposo plotone :P
-- 
doGmaI

company che non ne vale la pena visto il target del sito)?
Direi che hai descritto molto bene il tutto, prestando attenzione alla
sicurezza. Personalmente uso questo codice per generare
l'identificativo di sessione:
$sid = md5(uniqid(rand(), true));
come da manuale:
http://it.php.net/manual/it/function.uniqid.php
Comunque è un dettaglio.
Ciao.
Francesco Mazzi
Webmaster di AltroPC.it - 
http://www.altropc.it
 
Dev.Staff di E-Xoopport - 
http://dev.e-xoopport.it

 $sid = md5(uniqid(rand(), true));
perfetto, grazie della dritta, sarà sicuramente meglio del mio random ;P
-- 
doGmaI

aggiungerei anche che sarebbe ancora piů sicuro se a ogni accesso si 
rigenerasse una chiave da salvare sia sul client (cookies) sia sul server. 
In questo modo se viene sniffata, dura cmq fino al prossimo accesso, e se 
qualcuno accede senza permesso, la chiave cambia e all'utente verranno 
chiesti login e pass al primo accesso...
Io faccio cosě.
ciao ciao 

 ciao ciao
GRANDE!
Lo faccio domani stesso...
-- 
doGmaI

database le "sessioni" scadute. 
per far questo potresti sfruttare (se puoi sul server) uno script di
pulizia che viene lanciato ogni tot tempo con il cron.
-- 
Scritto da Gordon
E-mail: tbeqba@_EVZHBIVZV_avpu.vg

 pulizia che viene lanciato ogni tot tempo con il cron.
E purtroppo sul server dove ho il sito non posso sfruttare cron.
Infatti mi son dovuto arrangiare con una DELETE al caricamento della home
-- 
doGmaI

Il Tue, 20 Sep 2005 19:01:41 GMT, doGmaI scrisse:
Allora ....
Funzianano cookie e sessioni. Ma mi è venuta in mente ancora una cosa
Ad esempio oggi ho lasciato il browser puntato su una pagina di quelle
private per lungo tempo. Questa pagina non è esattamente una pagina privata,
ma una mista. Mi spiego meglio
In questa pagina ci sono diverse sezioni, e gli utenti normali possono
accedere alle prima X sezioni, mentre le ultime due sono riservate agli
utenti registrati (ok non sarà il massimo come scelta strutturale, erano
meglio due pagine diverse, ma ho notato che separandole gli utenti non ci
capiscono + niente). Ad ogni modo. Ho acceduto a questa pagina dopo aver
fatto login e vedo le X+2 sezioni. Lascio il browser aperto fintanto che
scade la sessione in corso. Se faccio un aggiornamento della pagina (c'è un
combo da cui l'utente seleziona quale sezione della pagina stessa vedere),
ovviamente torno nella pagina ma con le 2 sezioni riservate nascoste.
Ripasso per la home e ci torno e giustamente sono di nuovo loggato (perchè
il recupero dei dati sul login lo faccio solo in home).
Mi chiedevo è una scelta corretta, oppure sarebbe meglio in ogni pagina
riservata, fare il controllo e se la sessione è scaduta recuperare i dati
dal cookie? Preciso che nelle altre pagine che sono strettamente riservate,
c'è un if (autorizzato()!=TRUE) redirect(home.php), quindi la pagina al
reload non ricompare ma l'utente viene riportato alla homepage.
Non so se sono stato abbastanza chiaro
Intanto grazie :D
-- 
doGmaI

Infatti mi son dovuto arrangiare con una DELETE al caricamento della home
peccato. Comunque non dovrebbe essere un problema, da quel che ho
capito del target del sito.


Il Fri, 23 Sep 2005 18:25:08 +0200, Lord Gordon scrisse:

Già... vabbè non dovrebbe essere poi pesantissima come soluzione anche una
semplice DELETE... Magari alcun sessioni sforeranno un po' nel tempo, ma non
credo capiti nemmno molto spesso perchè di visite ce ne sono un po', la
probabilità che un utente arrivi dopo che una sessione è scaaduta non
dev'essere poi bassissima.... spero
-- 
doGmaI