2009-10-27 17 views
6

Sto cercando suggerimenti e idee su come integrare al meglio l'autenticazione con PHP utilizzando i cookie.Qual è la migliore pratica per l'utilizzo dei cookie per l'autenticazione con PHP?

caso ogni controllo script php per il valore del cookie per determinare se l'utente è ancora connesso a? Dovrebbe esserci uno script che esegue questo controllo e include lo script da ciascuno degli altri script? Il valore del cookie può essere visto da php da diverse profondità del filesystem?

come: blahblahblah.com/ e blahblahblah.com/login/

possono entrambi leggere il cookie?

Un sacco di domande su un post, ma grazie!

+0

La sicurezza è un'area in cui, se devi chiedere, non sei abbastanza esperto per costruirlo da solo. Inevitabilmente creerai una vulnerabilità di qualche tipo e finirai per pagarla in seguito. Ci sono librerie di autenticità decenti là fuori, scritte da persone che hanno una profonda comprensione dei problemi di sicurezza a portata di mano. Scegline uno e usalo. –

+0

Se non è un'applicazione critica, potrebbe essere molto istruttivo creare un'autenticazione da zero. - Tuttavia, dato che ci sono molti buoni framework (Zend Framework, Symfony, CakePHP) otterrete risultati migliori se non reinventate la ruota e fate tutto da soli. –

+0

Grazie a tutti per le vostre risposte. Molto utile. Sto usando le sessioni di php per mantenere i valori di input del modulo e avere uno script 'start over' che distrugge la sessione. Ecco perché stavo cercando di utilizzare i cookie per l'autenticazione invece della sessione di php. Ma sulla base delle risposte a questo thread ho bisogno di mantenere l'autenticazione sul lato server. E grazie per i riferimenti al framework php. Ho usato alcuni ma non Symfony o CakePHP. Andando a provarli. –

risposta

3

nulla è sicuro sul lato client.

si cambia la bandiera di login sui cookie facilmente su qualsiasi browser. Pertanto è più consigliabile salvare i dati relativi all'accesso su $ _SESSION di php

Se si desidera estendere la sessione, è sufficiente guardare session_set_cookie_params().

Per impostazione predefinita, la stessa sessione saranno utilizzati per il dominio corrente e tutti i percorsi su quel dominio. Pertanto è leggibile sia per blahblahblah.com/ che per blahblahblah.com/login/

Quando l'utente esegue il login, salva il nome utente e l'hash della password nella sessione.

All'inizio di ogni script, verificare il nome utente e la password della sessione con quello nel database. Se è corretto, imposta un flag (ad esempio $ userLoggedIn = true) per indicare sul lato server che l'utente ha effettuato l'accesso. Else false.

0

E 'una buona idea avere uno script di fare il/controllo login sessione e includerlo nelle pagine sicure. Come per la profondità, è possibile definirlo in setcookie() se il parametro directory è impostato su "/", quindi è accessibile a tutti.

Generalmente è consigliabile utilizzare sessioni anziché cookie, in quanto ciò è più sicuro, ma è possibile decidere di creare il proprio sistema di sessione basato sui dati crittografati nel cookie e che può funzionare anche, ma di nuovo sessioni, quale archivio i dati sul lato server sono raccomandati.

0

Il cookie è per dominio, quindi non importa quanto siate profondi nella struttura della directory, il cookie verrà letto OK (a condizione che il vostro dominio rimanga lo stesso - NB: questo significa che www.example.com ed esempio. com possono essere diversi cookie).

Suggerirei di avere un controllo di autenticazione che confronta l'ID di sessione nel cookie con ad esempio una tabella di database che elenca gli utenti registrati e il loro ID di sessione - questo controllo può essere nel proprio metodo/include file che è include() su ogni pagina In questo modo il controllo verrà eseguito su ogni caricamento della pagina. NB questo è di base e ci sono metodi molto più sicuri - alcuni dei quali sono stati citati in altri commenti qui.

Come Mauris said come, nulla è sicuro sul lato client - non utilizzare un cookie per memorizzare un valore "logged_in" che si verifica per vero/falso!

2

Alcune riflessioni, in nessun ordine particolare:

  • separare i vari strati: la memorizzazione permanente vs autenticazione.
  • Le sessioni PHP sono piuttosto robuste e rappresentano il modo consigliato per mantenere l'archiviazione persistente.
  • È possibile avere una sessione valida, ma non un accesso valido.
  • Evita più cookie. Uno è abbastanza. Le sessioni PHP funzionano con un cookie.
  • È possibile impostare sottodomini e percorsi sui cookie, ma c'è davvero poco punto a meno che non si imposti lotti, il che non è raccomandato (vedi sopra).
  • Metti invece tutto ciò che pensi di poter desiderare in un cookie nella sessione.
  • Dovresti avere un codice comune che includa tutte le tue pagine. È qui che si inizializza la sessione. Allora tutto funzionerà. Può anche verificare che l'accesso sia valido.
  • Avere un posto che fa l'autenticazione di accesso e tutto ciò che è associato.
  • Non dimenticare una schermata di disconnessione!
Problemi correlati