Domanda

è la memorizzazione nome utente e Password dell'utente in un cookie una buona pratica? Voglio davvero sapere come grandi siti come ( Facebook, Digg, Twitter ) gestire questa situazione. Il mio codice è così:

<?php

$username = mysql_real_escape_string($_POST['username']);
$password = md5($_POST['password']);

?>

Dopo ogni login riuscito devo conservare il $username e il $password (MD5) in un cookie. E rigenerare l'id di sessione con session_regenerate_id()


E per autenticare l'utente posso controllare se esiste una sessione di login, altrimenti mi autenticare il cookie.

Tutte le idee? Grazie

È stato utile?

Soluzione

Sono un po 'confuso -? Stai usando sessioni PHP, o cookie

Se si memorizzano i dati in una sessione ($_SESSION['username'] = 'Tom' ecc), che i dati non viene memorizzata nel cookie dell'utente.

Se si memorizzano i dati in un cookie separato (per qualcosa come l'accesso automatico), si potrebbe desiderare di memorizzare un diverso, ID casuale invece, e cercare l'utente id una tabella di database.

autologins
----------
key (random hash)
user_id
expires

Altri suggerimenti

Solo un MD5 non è sufficiente, si dovrebbe almeno includere un 'sale' casuale (una piccola stringa casuale di caratteri) che si memorizza nel database.

Edit: A proposito, hai memorizzare il testo normale password o criptati? Questo potrebbe essere un rischio per la sicurezza più grande.

La pratica standard è di dare all'utente un ID di sessione in un cookie, sia da soli o utilizzando le sessioni PHP. Memorizzazione nome utente e password hash in un cookie è ancora fatta da alcuni siti, ma io preferisco la prima. Esso consente di dare agli utenti un maggiore controllo sui propri dati di accesso, in modo che possano vedere il numero di sessioni che hanno e che IP sono, per esempio -. Vedere GMail per un buon esempio

In tema di sali e hashing, è necessario memorizzare gli hash delle password nel salato database. Idealmente, il sale dovrebbe essere diverso per ogni utente. Nel caso in cui il database è stato rubato o esposto, questo renderà molto più difficile per un utente malintenzionato di ottenere le password (se tutti usato lo stesso sale che potrebbero generare tabelle arcobaleno per questo sale, che richiede molto tempo, ma avrebbe permesso loro poi rompere le password abbastanza rapidamente). Per motivi di sicurezza il sale deve anche contenere alcuni caratteri non alfanumerici, come% $ & ^.

Joel L's risposta è un buon compromesso. L'unica cosa che vorrei aggiungere è che invece di un ID casuale, si potrebbe aggiungere qualche informazione in più identificativi dell'utente per renderlo più sicuro.

Ad esempio, utilizzare un hash dell'indirizzo IP dell'utente e un sale, fornisce una protezione supplementare contro qualcuno rubare o annusando cookie di protezione dell'utente.

Ho il sospetto che Twitter utilizza qualcosa come questo, che è il motivo per cui si può essere in modo permanente l'accesso solo in Twitter da un computer alla volta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top