Visualizzazione dei risultati da 1 a 7 su 7

Discussione: ricorda password

  1. #1

    ricorda password

    ho tentennato un bel po' prima di scrivere questo post: sinceramente non sapevo in che sezione inserirlo.

    problema: devo inserire un servizio di ricorda password all'interno del mio sito. la sezione prevede l'iscrizione tramite (minimo) nome, cognome, email e password ed il login tramite cognome, email e password. il servizio ricorda password richiede l'email ed il cognome e nel caso trovi i due dati (coincidenti) nel database invia la password all'indirizzo richiesto.

    secondo voi è un metodo sicuro? dovrei richiedere l'autenticazione all'atto dell'iscrizione?

    se chiedessi l'autenticazione pero' sorgerebbero due problemi:

    1) se richiedo il click su di un link o il copia-incolla del link inviato via mail nella barra indirizzi del browser mi ritroverei con delle variabili in chiaro (dovrei per forza autenticare l'utente tramite la querystring). ma per essere sicuro che non si tratti di una bufala dovrei inviare come minimo un parametro di sicurezza, come il numero di sessione, il quale potrebbe facilmente essere identificato. se agissi così, inoltre

    2) l'utente potrebbe iscriversi e poi chiudere la sessione del browser. in questo caso mi salterebbe l'autenticazione, anche se corretta da parte dell'utente!

    come devo fare?

  2. #2
    Moderatore di Sicurezza informatica e virus L'avatar di Habanero
    Registrato dal
    Jun 2001
    Messaggi
    9,782
    Non so se ho capito bene ma tu fai fare il login con tre elementi? congnome, email e password? se è così ti dico che secondo me crei più disagi all'utente che si deve autenticare che aumentare la sicurezza. Secondo me sono sufficienti:
    -un elemento pseudonoto: username, cognome, email... ma meglio uno username scelto dall'utente visto che cognome e email sono direttamente riferibili all'utente e quindi facilmente individuabili da terzi.
    -un elemento segreto cioè una password.

    Per quanto riguarda il servizio ricorda password a mio avviso dovrebbe essere sufficiente l'inserimento dello username e dell'email che deve essere la stessa fornita all'atto dell'iscrizione. La password puo' essere spedita a quell'account di posta.
    In alternativa invece di spedire direttamente la password puoi spedire un link ad una pagina che permetta semplicemente di reimpostare la pass per quell'account. In questo modo se un terzo venisse a conoscenza di username, email e addirittura riuscisse a compromette la casella di posta potrebbe solo modificare la password ma non leggere quella attuale. In questo modo il vero utente non riuscendo più a fare il login si accorgerebbe del problema e potrebbe contattare l'amministratore del sito per segnalare il problema.
    Ovviamente l'invio del link deve essere in qualche modo autenticato in modo univoco tramite una querystring assegnata al momento della richiesta per quel determinato recupero password.


    Per quanto riguarda quella che tu chiami autenticazione dell'iscrizione e che io preferisco chiamare conferma dell'autenticità dell'iscrizione secondo me è soprattutto utile per verificare che l'email fornito in fase di iscrizione sia esistente e realmente in possesso di chi si è iscritto. In questo modo eviti che qualcuno si iscriva per il gusto di iscriversi fornendo un email falsa. Ti consiglio inoltre di verificare che ad ogni email presente nel tuo database sia sempre e solo associato un unico account. Insomma due account non possono avere la stessa email anche se dovessero essere entrambi dello stesso utente.

    Sinceramente non ho capito i tuoi timori riguardo alla querystring in chiaro. Il "codice di sicurezza" inviato come autenticazione nella querystring deve essere usato una sola volta per una sola operazione ed essere il più casuale possibile.
    Leggi il REGOLAMENTO!

    E' molto complicato, un mucchio di input e output, una quantità di informazioni, un mucchio di elementi da considerare, ho una quantità di elementi da tener presente...
    Drugo

  3. #3
    per quanto riguarda il login hai ragione, essendoci un controllo di univocità delle email è ragionevole consentire il login solo con user e pass.

    In alternativa invece di spedire direttamente la password puoi spedire un link ad una pagina che permetta semplicemente di reimpostare la pass per quell'account.
    ma come faccio a sapere che il link proviene proprio da quella email? non penso esista un referrer che mi consenta di capire che proviene esattamente da quella mail, no?

    Ovviamente l'invio del link deve essere in qualche modo autenticato in modo univoco tramite una querystring assegnata al momento della richiesta per quel determinato recupero password.
    non ho capito :master:

    Ti consiglio inoltre di verificare che ad ogni email presente nel tuo database sia sempre e solo associato un unico account.
    già fatto

    Il "codice di sicurezza" inviato come autenticazione nella querystring deve essere usato una sola volta per una sola operazione ed essere il più casuale possibile.
    e se l'utente chiude il browser? che faccio? memorizzo temporaneamente quel codice nel db in attesa che venga confermato dall'utente?

    abbi pazienza, rispiegami un po' di cose

  4. #4
    Moderatore di Sicurezza informatica e virus L'avatar di Habanero
    Registrato dal
    Jun 2001
    Messaggi
    9,782
    ma come faccio a sapere che il link proviene proprio da quella email? non penso esista un referrer che mi consenta di capire che proviene esattamente da quella mail, no?

    e se l'utente chiude il browser? che faccio? memorizzo temporaneamente quel codice nel db in attesa che venga confermato dall'utente?
    L'utente fa una richiesta per un recupero password. Inserisce Username e indirizzo Email. La tua pagina dinamica accoglie la richiesta. Ora devi provvedere a creare un codice univoco che identifichi tale richiesta e momorizzarlo nel DB (vedi dopo). Poi provvedi a spedire all'indirizzo email un link del tipo:
    htttp://www.tuosito.com/resetpwd.asp?r=codice
    Insomma richiama una pagina di reset per la password con incluso nella querystring il codice univoco.

    Quando l'utente clicca sul link la pagina verifica che il codice del link sia presente nel database, in caso affermativo recupera le informazioni relative all'utente che ha fatto la richiesta e visualizza il Form di cambio password.
    Nella Action del Form (indipendentemente dal fatto che usi GET o POST) sarà presente un url in cui è ancora presente il codice univoco nella querystring.
    La pagina deputata alla reale modifica della password recupera i dati dal form, verifica ancora il codice univoco ed esegue la modifica.
    Solo una volta che il programma sul server ha effettivamente cambiato la password viene elminata la voce nel database. In questo modo se l'utente si disconnette o chiude la pagina prima dell'effettiva modifica rimane ancora la possibilità invocare la pagina.

    Per quanto riguarda la generazione del codice univoco ti puoi sbizzarrire. Sicuramente è necessario che sia abbastanza lungo per evitare che qualcuno possa provare tutte le combinazioni. 16 caratteri penso siano sufficienti. Ovviamente dovrà essere formato da lettere e numeri (deve pur sempre essere mandato nella query string).
    Come generarlo? Potresti per esempio implementare una routine di hashing (SHA MD5 etc) e dargli in pasto l'email dell'utente concatenato con data (anno mese giorno) e ora sul server (ora minuti e secondi).


    Tengo a precisare che tutte le cose che ti ho detto non sono frutto di esperienza. Ho semplicemente ragionato su come avrei risolto la cosa ma dovrebbe funzionare!
    Leggi il REGOLAMENTO!

    E' molto complicato, un mucchio di input e output, una quantità di informazioni, un mucchio di elementi da considerare, ho una quantità di elementi da tener presente...
    Drugo

  5. #5
    ok, ora ci sono, grazie mille davvero

  6. #6
    Moderatore di Sicurezza informatica e virus L'avatar di Habanero
    Registrato dal
    Jun 2001
    Messaggi
    9,782
    Buon Lavoro!

    ah ovviamente se implementi la cosa con un hash devi rendere il risultato in forma alfanumerica... in questo caso puoi semplicemente usare la sua rappresentazione esadecimale.
    Leggi il REGOLAMENTO!

    E' molto complicato, un mucchio di input e output, una quantità di informazioni, un mucchio di elementi da considerare, ho una quantità di elementi da tener presente...
    Drugo

  7. #7
    Originariamente inviato da Habanero
    Buon Lavoro!

    ah ovviamente se implementi la cosa con un hash devi rendere il risultato in forma alfanumerica... in questo caso puoi semplicemente usare la sua rappresentazione esadecimale.
    ehmm... compro una vocale

    no, scherzo: no problem

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 © 2026 vBulletin Solutions, Inc. All rights reserved.