2010-07-01 18 views
7

Nuovo per le sessioni PHP qui. I miei dati utente archiviati sono piuttosto limitati e non molto sensibili, ma ovviamente voglio ancora un sito sicuro. Ho memorizzato il loro hash della password nel mio db con il sale.È comune memorizzare una password utente in una sessione PHP?

Devo convalidare un utente su ogni pagina del mio sito utilizzando la sua password o è eccessivo? In altre parole, se hanno "effettuato il login" con successo e ho memorizzato il loro nome utente in una sessione php è abbastanza buono da poter girare, con il sito che sa chi sono?

Chiedo perché sembra che memorizzare una password utente in una sessione non sia probabilmente l'idea migliore. È vero?

risposta

8

non hai bisogno di autenticazione a ogni richiesta, ma si ha bisogno di autorizzare su ogni richiesta.

L'autenticazione è quella in cui si convalida il nome utente/password dell'utente rispetto al database. Una volta che si sono autenticati con successo, è sufficiente memorizzare il proprio ID utente (o nome utente) nella sessione.

Ad ogni richiesta successiva, verificare che la sessione corrente sia autorizzata per visualizzare il contenuto richiesto. Nel tuo caso, probabilmente devi solo assicurarti che ci sia un ID utente valido nella sessione ... non devi fare nulla con il database.

È possibile utilizzare una funzione simile al seguente per autorizzare a ogni richiesta:

function isAuthorized() { 
    return isset($_SESSION['user_id']) && ($_SESSION['user_id'] != 0); 
} 

È possibile rendere questo ancora più sicura amministrando i propri dati di sessione in un database, e quindi non si dispone riporre molta fiducia nei cookie, che possono essere scambiati/rubati/ecc. da utenti (malevoli). Ma di solito è eccessivo per la maggior parte delle app web.

2

Non memorizzare la password nella sessione, è possibile archiviare solo che hanno effettuato l'accesso nella sessione.

$_SESSION['uerlogged'] = $mytoken; 

Poi ogni controllo caricamento della pagina per vedere se $_SESSION['userlogged'] è impostato.

Si può anche prendere in considerazione l'aggiunta di precauzioni per la sessione hi-jacking Date un'occhiata a - PHP: Preventing Session Hijacking with token stored as a cookie?

+0

Oops, mi dispiace per quella sovrascrittura ... – Piskvor

5

Non memorizzare la password. Invece, memorizzare un token di autenticazione che è possibile verificare per esistenza in una tabella separata.

1

Non dovrebbe essere realmente necessario memorizzare una password in una sessione. Dovresti avere flag di stato per mostrare se sono attualmente autenticati o meno con qualche tipo di oggetto che definisce chi è l'utente e le informazioni su di essi.

0

La memorizzazione della password nella sessione non è diversa dalla memorizzazione del nome utente nella sessione una volta che l'utente ha effettuato l'accesso, quindi non memorizzare la password.

Funzionerà semplicemente come nome utente memorizzato, il che è sufficiente (anche una bandiera farà).

0

Gli utenti non possono modificare le sessioni, è possibile memorizzare solo il nome utente lì e fidarsi che sarà sempre corretto.

Problemi correlati