2009-09-11 4 views
11

Qual è la cosa migliore da memorizzare in un cookie per mantenere uno stato di accesso persistente?Cosa dovrebbe essere memorizzato in un cookie per un sistema di login?

Ho visto molti siti Web (e tutorial per principianti!) Che semplicemente memorizzano qualcosa come validUser = 1 in un cookie. Chiaramente potrei spoofarlo e il sito web penserebbe che fossi un utente valido.

Se il nome utente è memorizzato nel cookie, potrei mascherarmi come qualsiasi utente inviando un cookie con il suo nome utente nella mia richiesta.

Quindi se si memorizza il nome utente e password nel cookie, quindi devo conoscere il nome utente e la password per accedere. Effettivamente l'utente è loggato automaticamente - è come avere la password salvata dal suo browser. Invece di dover digitare le credenziali nelle caselle ogni volta, il browser le invia automaticamente con ogni richiesta di pagina.

Ma questa è ancora una cattiva idea? Memorizzare una password in testo semplice non è un'idea brillante, ma è così che verrebbe inviata nei dati POST al momento del login. Inoltre, potrebbe essere memorizzata come hash. Ma ancora non mi sento a mio agio.

Forse i cookie non devono essere utilizzati per memorizzare nulla tranne un ID di sessione e i dati dell'utente sono memorizzati sul server stesso. Questa è forse una posizione più sicura, presumendo che il server non sia condiviso.

Guardando alcuni software open source come il software del forum, usano un sistema più complicato, ma non riuscivo a capire esattamente cosa stesse facendo sfogliando il codice.

Qual è la "migliore pratica" standard?

+1

Quindi è semplice come memorizzare un ID utente nella sessione, quindi? Questo è sicuro e non è necessario memorizzare ulteriori informazioni su un particolare accesso nel database? (ad es. IP), e per cambiare tutte le sessioni/dati ogni volta che si rivisitano, come ho visto fare questi script di grandi dimensioni? – Rob

+0

Dovresti riutilizzare un framework di autenticazione esistente quando possibile, perché, in realtà, è complesso. Ad esempio, dai un'occhiata a https://github.com/delight-im/PHP-Auth – caw

risposta

6
+0

Il secondo link è ora rotto. –

+0

@DrTwox È ora. –

+6

Le risposte che contengono solo collegamenti non sono buone risposte. Questa risposta dovrebbe essere modificata per includere un riassunto degli articoli collegati. (Sì, lo so che è già una risposta molto vecchia.Tuttavia, il commento su un collegamento interrotto illustra perfettamente la necessità di riepilogare i collegamenti.) –

3

migliore pratica sarebbe quella di utilizzare un SESSION invece di un cookie per i dati di utilizzo. I COOKIES vengono utilizzati per memorizzare informazioni generiche e non informazioni specifiche su un utente, ecco a cosa servono le SESSIONI.

0

La procedura consigliata consiste nel memorizzare un ID di sessione generato in modo casuale. La sessione quindi memorizza l'ID utente o qualsiasi altra cosa che ti serve per l'archiviazione. In PHP il metodo session_start() genera automaticamente l'id di sessione e un cookie denominato PHPSESSID, quindi è necessario preoccuparsi solo di archiviare i dati nell'array $ _SESSION, non nel cookie.

0

L'unica cosa che dovrebbe essere in un cookie è il sessionid generato da PHP (e questo viene fatto automaticamente quando si usano le sessioni). Non si deve memorizzare nulla nel cookie eccetto forse un nome utente ricordato ai fini della casella di controllo "ricordami".