2016-09-14 8 views
-1

C'est la première fois que j'utilise des fonctions de mot de passe natives PHP dans mon application. J'ai stocké le mot de passe de l'utilisateur en utilisant le code ci-dessous:password_verify() ou en comparant l'entrée de l'utilisateur haché avec le mot de passe stocké en PHP?

password_hash($this->input->post('password'),PASSWORD_BCRYPT); 

Et le résultat est stocké dans la base de données. Maintenant, je veux vérifier l'utilisateur dans le processus de connexion.

Ma question est ici. I have 2 choix:

Méthode 1

$sql = "SELECT id,password FROM tbl_members WHERE email = ? LIMIT 1"; 
$result = $this->db->query($sql,array('[email protected]')); 
if ($result->num_rows()) { 
    $row = $result->row(); 
    $hash = $row->password; 
    if (password_verify($this->input->post('password'), $hash)) echo 'Successful login'; 
} 

Méthode 2

$hash = password_hash($this->input->post('password'),PASSWORD_BCRYPT); 
$sql = "SELECT id FROM tbl_members WHERE email = ? AND password = ? LIMIT 1"; 
$result = $this->db->query($sql,array('[email protected]',$user_hashed_password)); 
if ($result->num_rows()) echo 'Successful Login'; 

La méthode est plus appropriée pour un procédé de connexion?

+0

L'un est vulnérable aux attaques de synchronisation que l'autre ne l'est pas. L'API est fournie pour une raison. Utilise le. – PeeHaa

+1

@PeeHaa En fait ... un * fonctionne *, et l'autre ne ... – deceze

+0

password_hash est plus sécurisé pour moi, – Beginner

Répondre

-1

La première méthode est la meilleure et est comme elle devrait être utilisée. Le cryptage, le sel etc sont stockés dans la chaîne de hachage, donc si vous changez votre cryptage, les anciens hachages stockés sont toujours valides, et plus, vous n'avez pas besoin de stocker le sel et l'algorithme, juste le hachage.