2010-10-25 29 views
9

Mi piacerebbe creare un semplice sistema di login/registrazione utente usando PHP e mysql. Non ho bisogno di ottenere informazioni oltre a quelle necessarie per l'accesso e la disconnessione dell'utente. Voglio assicurarmi che il sistema sia sicuro.Sistema di accesso/registrazione con php e mysql

Il modo che ho attualmente a capire come dovrebbe funzionare è:

Registrazione

utente inserisce il proprio indirizzo email e la password e la password di conferma.

Lo script PHP si assicura che le password corrispondano e che l'e-mail sia un indirizzo valido e non sia già nel database.

Assegna la password con un salt casuale e memorizza la password salt hash e risultante nel database. (La funzione md5 di php è adatta?)

Archiviare un codice di conferma tramite e-mail nel database e inviare l'indirizzo e-mail fornito un collegamento al sito Web che contiene quel codice per la verifica ?

Accesso

input dell'utente il proprio indirizzo email e la password.

Il server ricerca l'e-mail nel database e recupera il sale. Quindi blocca il sale con la password che l'utente ha appena fornito per vedere se corrisponde a quella nel database.

Come faccio a mantenere la sessione persa dopo l'accesso. Con una sessione PHP? Un biscotto? Cosa dovrebbe essere memorizzato nel cookie per ricordare l'utente tra una visita e l'altra?

Fondamentalmente vorrei solo verificare che il processo che sto descrivendo sia un modo accurato e sicuro di eseguire la registrazione/login dell'utente. Inoltre, quali sono alcuni buoni tutorial con maggiori informazioni.

risposta

5

La funzione mp5 di php è adatta a questo?

MD5 non è più considerato sicuro; considera l'utilizzo del più recente hashing delle password di PHP con l'algoritmo bcrypt che ha una complessità computazionale variabile: PHP password_hash() e password_verify().

Come faccio a mantenere la sessione persa dopo l'accesso. Con una sessione di php? Un biscotto? Cosa dovrebbe essere memorizzato nel cookie per ricordare l'utente tra una visita e l'altra?

Idealmente, si potrebbe utilizzare una sessione PHP per mantenere lo stato nel corso di una sola visita, e se si desidera avere una "Ricorda la password" l'opzione, si può usare un cookie che contiene informazioni sufficienti per autenticare un ritorno utente e riavviare una nuova sessione. C'è un buon articolo del 2004 sulle migliori pratiche riguardanti i cookie di accesso qui: Persistent Login Cookie Best Practice. Potresti anche essere interessato a una soluzione più moderna (2015) a securely implementing "remember me" checkboxes.

Oltre a questi, penso che qualunque cosa tu abbia descritto va bene.

+0

Vorrei solo aggiungere che ho trovato una buona risposta su un'altra domanda sulla parte di hashing in particolare. http://stackoverflow.com/questions/401656/secure-hash-and-salt-for-php-passwords – Mike

1

Poiché i sistemi di accesso sono una parte così integrante di un sito Web, sei fregato se viene violato. A meno che tu non lo stia facendo a scopo didattico, ti consiglio di trovare un sistema creato da qualcuno che abbia esperienza nel campo. Dormirai sonni tranquilli di notte.

Un esempio di un solido sistema di accesso predefinito è tank auth, è scritto per il framework Code Igniter. Potresti voler vedere come questo ragazzo ha progettato il sistema per ottenere idee su ciò che è importante se decidi di scrivere da solo.

Anche solo una nota dall'esperienza, ci vuole più tempo per scrivere un sistema di login da zero di quanto non faccia per imparare il framework di accensione del codice e installare auth tank.

4

Alcune note su alcune considerazioni mancanti:

sessioni PHP in genere già utilizzano i cookie: l'ID di sessione viene memorizzata come uno.

Le sessioni possono essere dirottate; dovresti anche prendere provvedimenti per ridurre la possibilità (inizia leggendo "PHP: Preventing Session Hijacking with token stored as a cookie?" e "What is the best way to prevent session hijacking?").

Relativo al dirottamento è fixing, in cui un utente malintenzionato sceglie l'ID di sessione. Ci sono due modi per combatterlo: imposta session.use_only_cookies (il valore predefinito in PHP> = 5.3) e cambia l'ID di sessione quando un utente effettua l'accesso con session_regenerate_id.

Vedere anche la domanda "PHP Session Security" e l'articolo "PHP Security Guide: Sessions".

1

Ecco un consiglio: considerare l'utilizzo di un framework prontamente disponibile che fornisce intrinsecamente tale funzionalità. sono provati e testati. dare un'occhiata a Kohana. Ha un modulo Auth che si occupa dell'autenticazione.

2

se si desidera una soluzione ready made

User Cake in php5

praticamente sicuro .. e stabile.

+1

UserCake supporta i cookie per ricordare la funzione di me? –