È sicuro memorizzare il token della password di reimpostazione nella sessione PHP

3

Ho un sistema di login creato in PHP. Al momento non ha la funzione "password dimenticata" e vorrei implementare la funzione.

Per questo ho intenzione di fare quanto segue:

  1. Quando l'utente invia il modulo con e-mail nella pagina "password dimenticata", viene inviata un'email con un token univoco di 50 caratteri.
  2. La chiave univoca generata viene memorizzata nel cookie di sessione utilizzando
    $_SESSION['forgotPassToken'] = "tokenof50chars";
  3. La pagina chiede di digitare il token univoco inviato alla casella di posta elettronica dell'utente.
  4. Quando viene inserito il token, il codice controlla se il token in sessione e quello inserito è lo stesso.
  5. Se uguale, viene generato un nuovo nome di variabile di sessione forgotPassVerified e viene reindirizzato a una pagina in cui l'utente può immettere la nuova password e inviarla.
  6. La password è cambiata e la sessione è distrutta. Pages chiede all'utente di accedere con la nuova password.

La mia domanda: è sicuro memorizzare il token generato casualmente nella sessione PHP o dovrei usare il database?

Non mi piace farlo nel database. Ecco perché mi sto avvicinando a questo modo di sessione.

Ecco i motivi per cui non sto utilizzando il database per la memorizzazione dei token:

  1. Alcuni utenti (cracker) inviano semplicemente il modulo con un'e-mail. Essi non controllare la posta in arrivo.
  2. Salva spazio database
  3. Riduci l'utilizzo dell'esecuzione di query SQL.
posta Subin 18.03.2014 - 16:32
fonte

1 risposta

5

Is it safe to store the randomly generated token in the PHP Session or should I use database?

Può essere se fatto correttamente. Come viene controllato l'accesso ai file che memorizzano le informazioni sulla sessione? Questo è soprattutto un problema su un sistema condiviso.

Però ci sono degli svantaggi in questo approccio. Le sessioni scadono e le email possono essere lente. Se l'utente non riceve l'e-mail immediatamente, potrebbe chiudere il browser, nel qual caso l'ID di sessione memorizzato nel browser verrà cancellato. Quindi quando ricevono l'email e digita il segreto, non è possibile convalidare la richiesta.

    
risposta data 18.03.2014 - 18:01
fonte

Leggi altre domande sui tag