In PHP, creare una sessione è facile. Per prima cosa dichiaralo usando session_start()
. Gestisce la creazione di un cookie di sessione per te e praticamente tutte le cose difficili. Quando l'utente naviga nel tuo sito, puoi leggere e scrivere sulle variabili di sessione utilizzando l'oggetto globale $_SESSION
, che può influire sul contenuto che desideri visualizzare all'utente e persino su come viene visualizzato.
Ciò che accade è che il server genera un token casuale sicuro sul suo lato e quindi invia il valore come cookie al client che il client comunica automaticamente al server su ogni richiesta. Il server prende questo valore e lo utilizza per determinare quale oggetto in memoria deve fare riferimento come oggetto $_SESSION
.
Comunque vuoi gestire l'accesso iniziale dipende da te - non ho intenzione di approfondirlo qui. Ma una volta che l'utente effettua il login, vuoi indicarlo in $_SESSION
globale. Per renderlo sicuro, dovrai distruggere qualsiasi sessione esistente e crearne una nuova sull'autenticazione. Il modo in cui di solito lo faccio è che ho impostato $_SESSION['user']
all'accesso (dopo aver distrutto la sessione precedente e averne creata una nuova). In questo modo ha un altro uso, controllando se un utente è loggato: if(isset($_SESSION['user']))
.
Questa è una funzionalità di base, ma si spera che punti nella giusta direzione. I database non sono necessari per le sessioni a meno che non si stia tentando di implementare le politiche di accesso / sessione o si sta eseguendo il sito Web in un cluster. Ciò sarebbe dovuto a una discussione più complicata, che non credo sarebbe opportuno entrare qui.
Modifica / Aggiornamento :
Si scopre che in effetti entrerò nello specifico di un sistema di accesso sicuro; Se si desidera che il proprio sistema di accesso sia conforme agli standard in termini di sicurezza, sarà necessario eseguire correttamente l'hash (e il sale) della propria password. Risulta che esiste un metodo PHP per questo bene .
L'hashing trasforma praticamente tutto ciò che l'input è nella spazzatura che non può essere reinserito nell'input originale. L'hashing della password viene utilizzato per impedire alle persone di accedere alla password originale nel caso di un compromesso server / database in cui le password possono essere trapelate potenzialmente. La cosa più importante da sapere quando l'hashing è che gli algoritmi più lenti funzionano meglio per le password.
La salatura è quasi altrettanto importante dell'algoritmo utilizzato per proteggere le password. Il sale è un CSPRNG che viene semplicemente aggiunto alla password prima dell'hashing. CSPRNG è l'acronimo di Pseudo Random Number Generator crittograficamente sicuro, ed è davvero solo un modo elegante per dire che si tratta di un insieme di byte super casuali e imprevedibili. Questi byte sono generati casualmente su una base per password per proteggere gli utenti finali dagli attacchi rainbow, in cui un singolo hash prodotto può essere controllato su grandi quantità di password. Richiedendo un singolo hash per tentativo per password, riduce notevolmente le possibilità di perdere una perdita di password risultante da una perdita di hash di massa.
Un sistema manuale funzionerebbe come segue:
Quando viene creato l'account utente, una riga viene inserita nel database "utenti" con il nome utente specificato e la password con hash. La password hash viene prima salata (dati casuali aggiunti alla password), quindi hash con un algoritmo di hashing della password lenta. Il sale viene inoltre aggiunto all'hash della password prima di essere inserito nel database. Opzionalmente è possibile memorizzare qualcosa per identificare l'algoritmo di hash utilizzato con esso come bene. Se ti senti a disagio nel combinare questi valori, puoi anche memorizzarli come valori separati del database.
Quando viene avviata la procedura di accesso, il database viene interrogato nella tabella "utenti" per la riga con la chiave "nome utente" corrispondente al nome utente richiesto. Quella fila è tirata che include l'hash della password. Innanzitutto, il sale viene portato via dall'hash. Quindi il sale viene aggiunto alla password fornita durante l'autenticazione e l'intera cosa viene sottoposta a hash utilizzando lo stesso algoritmo di hashing utilizzato in origine. Quindi, se il risultato finale corrisponde all'hash che è stato memorizzato, l'utente può essere autenticato con successo.
Spero di non confondervi troppo con le mie spiegazioni. A quanto pare, Ashley Madison ha perso completamente il memo, quindi se non capisci, non sentirti male. Non sei un sito web da molti milioni di dollari. La maggior parte dei problemi viene da quando le persone si assumono la responsabilità di portare a termine le cose al di là delle loro competenze. A tale proposito, raccomando di utilizzare le funzioni di hashing della password predefinite, o almeno open source e pubblicamente raccomandate, laddove possibile. Prendono tutte le congetture dall'equazione.