Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    10

    Sessioni, cookies e token di autenticazione

    Ciao ragazzi, sto lavorando su un CMS per un amico, e sto diventando matto.
    La nostra idea è di fare qualcosa in stile "Facebook" per intenderci, vi spiego:
    L'utente si connette -> viene generato un token ($idkey) -> viene registrato in un database MySQL (id_utente | ts_accesso | idkey | attiva) -> viene assegnato all'utente ($_SESSION['nomesito']['idkey'] = $idkey; ) -> viene reindirizzato alla pagina index.php.
    Dalla pagina "pannello.php" l'utente può vedere tutte le sessioni aperte (una semplice interrogazione al database) e può chiuderle, volendo: viene mandata una query update che cambia "attiva" da 1 a 0.

    Il nostro problema, ora, è essenzialmente questo: l'utente deve poter utilizzare la funzione "ricordami" al momento del login, e dunque la sessione deve rimanere vita natural durante aperta fino al momento che lui va alla pagina "logout.php" dove viene mandata una query update che cambia "attiva" da 1 a 0, si attiva la funzione "session_destroy();" e avviene un redirect alla pagina index.php, oppure termina la sessione dalla pagina "pannello.php".
    Questo non avviene, perché se l'utente chiude il browser la sessione si autodistrugge (dunque il "ricordami" non funziona).

    Cosa potremmo fare? Usare i cookies? D'accordo su un possibile utilizzo dei cookies, come ci comportiamo se l'utente li ha "bloccati" perché magari si connette da un computer pubblico o da un ufficio?

    Davvero non so più come uscirne.. ogni consiglio è d'oro, siamo molto indietro con questo lavoro e dovremmo nei prossimi giorni andare avanti come treni..

    Grazie anticipatamente

  2. #2
    Se avvii una sessione, utilizzi un cookie. Quindi il problema non me lo porrei.
    Quasi ovunque se provi a loggarti con i cookie disattivati, non vai da nessuna parte.

  3. #3
    Utente di HTML.it L'avatar di Webmaster76
    Registrato dal
    Mar 2001
    residenza
    Torino
    Messaggi
    298
    Concordo, i cookie sono l'unica soluzione. Non vedo motivi per non utilizzarli.
    Un nuovo cms/framework... vuoi collaborare al progetto?

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    10
    D'accordo..
    So poco di questi cookie, possono essere "a vita" (tranne nel caso in cui l'utente faccia una pulizia del browser), così da poter fare la funzione "ricordami"?
    @Webmaster76 @chumkiu

  5. #5
    Nel crearli stabilisci la data di "scadenza" a tuo piacimento, volendo anche una data assurdamente lontana.
    http://www.miniscript.it
    Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.

  6. #6
    Utente di HTML.it L'avatar di Webmaster76
    Registrato dal
    Mar 2001
    residenza
    Torino
    Messaggi
    298
    Quote Originariamente inviata da ReAlpha Visualizza il messaggio
    D'accordo..
    So poco di questi cookie, possono essere "a vita" (tranne nel caso in cui l'utente faccia una pulizia del browser), così da poter fare la funzione "ricordami"?
    @Webmaster76 @chumkiu
    Basta settare un token di autologin (ovviamente sufficientemente sicuro) in un cookie con scadenza lunga (es 1 anno) e farlo cancellare solo al logout.
    Un nuovo cms/framework... vuoi collaborare al progetto?

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    10
    Perfetto! Ce l'ho fatta!
    Ve lo dico come ho fatto il token..
    $token = security_crypt($time.$security_hash.$time.$id.$pas sword);
    $security_hash è un hash md5, risultato da più codificazioni ("frase" -> md5 -> md5 -> sha1 -> base64 -> base64 -> base64 -> sha1 -> md5) (si, son matto ), e non verrà mai cambiato, tranne tre volte all'anno nella speciale manutenzione nella quale verranno anche distrutte tutte le sessioni.
    security_crypt() è una semplice funzioncina che uso per codificare password e hash passando il valore in entrata più volte (come $security_hash).

    Grazie mille per le delucidazioni e l'aiuto! :-)

  8. #8
    Utente di HTML.it L'avatar di Webmaster76
    Registrato dal
    Mar 2001
    residenza
    Torino
    Messaggi
    298
    Quote Originariamente inviata da ReAlpha Visualizza il messaggio
    Perfetto! Ce l'ho fatta!
    Ve lo dico come ho fatto il token..
    $token = security_crypt($time.$security_hash.$time.$id.$pas sword);
    $security_hash è un hash md5, risultato da più codificazioni ("frase" -> md5 -> md5 -> sha1 -> base64 -> base64 -> base64 -> sha1 -> md5) (si, son matto ), e non verrà mai cambiato, tranne tre volte all'anno nella speciale manutenzione nella quale verranno anche distrutte tutte le sessioni.
    security_crypt() è una semplice funzioncina che uso per codificare password e hash passando il valore in entrata più volte (come $security_hash).

    Grazie mille per le delucidazioni e l'aiuto! :-)
    Ottimo.



    Però non ti conviene tenere le sessioni così lunghe secondo me... si devono autodistruggere e cambiare, anche per questione di sicurezza e performance, tantopiù che non ti servono.

    Io preferisco generare/memorizzare un token random molto complesso direttamente in database (questo per evitare ogni riferimento a username e password) ed utilizzare questo per il cookie.

    In ogni pagina poi controllo in ordine:

    1) se esiste una sessione valida (con più criteri, ad esempio l'ip e l'user agent)
    2) se esiste un cookie che permette l'autologin (e se valido, cambio il token in db e sul cookie)
    3) se ci ci sono troppi tentativi errati blocco l'ip per 1 ora
    4) faccio i redirect al login oppure al contenuto della pagina

    Un nuovo cms/framework... vuoi collaborare al progetto?

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    10
    @Webmaster76 wow! Mi piace! Guarda, mi fido di te:
    questa è la tabella: http://cl.ly/image/3X0Y3U3B3h3L
    Mi conviene aggiungere anche un check dell'user agent e dell'IP con il token?
    Mi conviene dopo un tot di tempo, se l'utente ha scelto il remember (che come puoi vedere, memorizzo), ad esempio facciamo "12 ore", una disattivazione del precedente token e la generazione di uno nuovo assegnandolo senza dover rieffettuare il login?

  10. #10
    Utente di HTML.it L'avatar di Webmaster76
    Registrato dal
    Mar 2001
    residenza
    Torino
    Messaggi
    298
    Quote Originariamente inviata da ReAlpha Visualizza il messaggio
    @Webmaster76 wow! Mi piace! Guarda, mi fido di te:
    questa è la tabella: http://cl.ly/image/3X0Y3U3B3h3L
    Mi conviene aggiungere anche un check dell'user agent e dell'IP con il token?
    Mi conviene dopo un tot di tempo, se l'utente ha scelto il remember (che come puoi vedere, memorizzo), ad esempio facciamo "12 ore", una disattivazione del precedente token e la generazione di uno nuovo assegnandolo senza dover rieffettuare il login?
    Io controllo IP e useragent per evitare che qualcuno possa "rubare" la sessione, è una paranoia mentale. Ma la sicurezza non è mai troppa per cosa costa scrivere 2 linee in più...
    Anche il token conviene rigenerarlo di tanto in tanto, sempre per questione di sicurezza. Per l'utente è una operazione "trasparente", nel senso che viene generato dopo un login corretto, memorizzato in database e nei cookie.
    Un nuovo cms/framework... vuoi collaborare al progetto?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.