Come salvare il sale casuale nel database

2

A quanto ho capito, le password salate e di hashing sono la strada da percorrere. Capisco anche che per autenticare una password salata e hash, il sale casuale deve essere salvato. Significa che se utilizzo il seguente codice per elaborare la password:

$blowfish_salt = bin2hex(openssl_random_pseudo_bytes(22));  
$hash = crypt($data, "$2a$12$".$blowfish_salt);  

quindi avrei bisogno di creare una colonna nella mia tabella utenti che deve contenere il valore di $blowfish_salt?

Sono corretto nel pensare che

  1. Il codice sopra riportato deve essere incluso nel php che elabora il modulo di registrazione?
  2. Il modulo di elaborazione deve inviare il valore in $ blowfish_salt alla tabella da memorizzare accanto alla password?
  3. Il sale viene memorizzato così com'è - non c'è bisogno che venga elaborato / oscurato?
  4. Al momento dell'autenticazione, non è necessario sapere come è stato generato il sale in primo luogo?
  5. Se per qualche coincidenza due utenti selezionano la stessa password, il valore memorizzato salato e con hash lo renderà irrilevante?
    In che modo il codice di autenticazione utilizzerà il sale? C'è un codice specifico per questo?

Ho anche trovato il seguente codice in un tutorial come metodo per prevenire SQL injection:

//this function is to guard against sql injection

function prevent($this) {  
 $this = stripslashes($this);  
 $this = mysql_real_escape_string($this);  
 return $this;    
}

//the prevent() can be used like this on form fields to prevent sql injection  
prevent($username);  
prevent($password);  

Devo usarlo se sto salendo e facendo l'hashing della password nel modulo di registrazione? Nessun codice dannoso potrebbe essere criptato nel processo? O mi sto perdendo qualcosa?

    
posta vinaya 24.07.2013 - 13:13
fonte

1 risposta

0

Sei salato viene salvato nell'hash generato dalla tua funzione crypt() . Per verificare la password tutto ciò che devi fare è:

$res = crypt($password, $hash);

$res restituirà 1 se la password è corretta.

  1. Devi salvare l'hash della password, quindi sì.
  2. No, questo è già contenuto nella stringa che hai generato (se guardi da vicino puoi vedere che l'hash è effettivamente delimitato in diverse sezioni)
  3. I sali non sono mai considerati segreti, quindi non è un problema
  4. Fare riferimento a 2.
  5. Saranno diversi perché i sali saranno diversi

La prevenzione dell'iniezione SQL non è considerata sicura, maggiori dettagli a riguardo possono essere trovati qui SQL injection che aggira mysql_real_escape_string () su Stackoverflow e sì dovresti sempre disinfettare le variabili prima di elaborarle. Ci sono tonnellate di risorse disponibili su questo sito Web su come prevenire l'SQL injection correttamente. In generale non dovresti usare le funzioni mysql_ in PHP. PHP ha alcuni buoni strumenti che gestiscono tutti questi problemi per te come MySQLi e PDO. Dai anche un'occhiata alle stored procedure.

    
risposta data 24.07.2013 - 13:26
fonte

Leggi altre domande sui tag