Login ricordante
Login ricordante postato il 03/04/2009 10:45:04 nel forum programmazione, open source e hosting e modificato da blancks il 03/04/2009 11:01:48
Si è discusso di come rendere un login sicuro a tecniche di sniffing, ora il mio quesito è quello di fare un modulo ricordante sicuro.
Personalmente avevo pensato una cosa del genere:
- All'atto della registrazione mi viene creato l'utente con la pass criptata in sha1 e una stringa alfanumerica random unica solo per lui.
- Quando fa il login e spunta il ricordante io salvo nel cookie le seguenti informazioni:
id | hash( sha1(pass) + stringa random unica per pg)
- Quando l'utente torna sul sito, faccio la ricerca per id, prelevo pass e stringa random dal db, ricompongo l'hash e confronto con quello nel cookie, se corretto procedo con l'autenticazione.
Ora, in termini di sicurezza, ritenete possa essere sicura una cosa del genere oppure avete suggerimenti ?
Pagine → 1
03/04/2009 11:23:05
Io non manderei mai al client la password anche se criptata ...
Io gestirei piuttosto un sistema di sessioni usa e getta ovvero
Una tabella su gd con i campi
id_utente
id_sessione
expire
dove:
id_utente è l'id del pg
id_sessione è una stringa alfanumerica casuale lunga 50-100 caratteri
expire è oggi + una settimana ad esempio
quando faccio login e spunto la casella di "memorizza login" creo un record sulla tabella ed un cookie contente id utente ed id sessione.
Quando ritorno sul login eseguo in sequenza:
- query che ripulisce la tab sessioni dai record scaduti
- se c'è un cookie lo cerco sulla tabella
- se trovo la corrispondenza aggiorno l'expire su db e faccio login diretto
- altrimenti cancello l'eventuale cookie scaduto/fasullo e mostro la normale schermata di login
Tsu
03/04/2009 11:41:45 e modificato da blancks il 03/04/2009 11:44:47
tsumi ha scritto:
Quando ritorno sul login eseguo in sequenza:
- query che ripulisce la tab sessioni dai record scaduti
- se c'è un cookie lo cerco sulla tabella
- se trovo la corrispondenza aggiorno l'expire su db e faccio login diretto
- altrimenti cancello l'eventuale cookie scaduto/fasullo e mostro la normale schermata di login
Tsu
Nei cookie non c'è semplicemente la pass criptata, c'è la pass criptata concatenata ad una stringa casuale e il tutto ricrittato in sha256 che attualmente indecifrabile.
Ora nell'esempio ho scritto hash( pass + random ), ma random in realtà è spezzettato secondo criteri ben precisi e mescolato a pass: in questo modo, anche se si decodifica sha256 ( b.b" ) ci si ritrova una stringa sha1 inquinata dai pezzetti della stringa random lungo la sua interezza.
Pertanto mi sembra un metodo equivalente quello da te proposto, tranne che per l'uso di una tabella aggiuntiva, ma non per questo meno valido o interessante come procedimento.
Edit: al mio procedimento aggiungo che su suggerimento di raz, la stringa alfanumerica casuale unica la faccio ricreare ad ogni login effettuato dall'utente attraverso il modulo, così si ha un sistema variabile periodicamente in periodi casuali.
03/04/2009 11:48:39 e modificato da tsumi il 03/04/2009 11:57:50
No purtroppo non è equivalente
password random ed id sono fissi nel tempo (l'unica che potrebbe cambiare è la password, ma è altresì vero che la password non viene cambiata spessissimo ... non ogni settimana almeno).
Quindi non importa se mi è impossibile decifrare il tutto, anche averlo cifrato mi basta per loggarmi.
Mi basterebbe conoscere questa stringa e crearmi un cookie ad hoc per loggarmi.
Il mio sistema delle sessioni usa invece solo l'id come valore fisso (che peraltro non è manco segreto) + una stringa casuale e valida solo per un tempo limitato. Anche venisse rubata basta essere fuori dal tempo di expire perchè sia del tutto inutile
EDIT:
Se fai rigenerare la stringa ad ogni login ha già più senso. Però c'è un però ... se ti logghi da più pc finisci ogni volta per invalidare la sessione dell'altro rigenerando la stringa casuale. Avendo invece una tabella puoi avere più sessioni per più pc/browser indipendenti.
03/04/2009 15:38:35
tsumi ha scritto:
EDIT:
Se fai rigenerare la stringa ad ogni login ha già più senso. Però c'è un però ... se ti logghi da più pc finisci ogni volta per invalidare la sessione dell'altro rigenerando la stringa casuale. Avendo invece una tabella puoi avere più sessioni per più pc/browser indipendenti.
Meglio, così invalido login multipli. (anche se pensavo di mettere un controllo tramite una data di connessione salvata nel db per evitare ciò in contemporanea)
03/04/2009 15:38:35 e modificato da blancks il 03/04/2009 15:39:19
tsumi ha scritto:
EDIT:
Se fai rigenerare la stringa ad ogni login ha già più senso. Però c'è un però ... se ti logghi da più pc finisci ogni volta per invalidare la sessione dell'altro rigenerando la stringa casuale. Avendo invece una tabella puoi avere più sessioni per più pc/browser indipendenti.
Meglio, così invalido login multipli. (anche se pensavo di mettere un controllo tramite una data di connessione salvata nel db per evitare ciò in contemporanea)
Comunque grazie degli interventi, proverò entrambe le vie ;-)
03/04/2009 16:42:01
Meglio, così invalido login multipli.
Meglio ... oddio ... dipende da cosa vuoi ottenere.
Giusto per la cronaca... i principali cms e blog gestiscono le sessioni col sistema che ti ho spiegato io e tutti supportano più sessioni in contemporanea
Discussione seguita da
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
War Thunder ↗
World of Warship ↗
RAID Shadow Legends ↗
The Coven ↗
Enlisted ↗
Tiles Survive ↗
CRSED: F.O.A.D. ↗