Password check on select Where

Asked

Viewed 77 times

1

I changed the security of my site. I changed the format when saving the password sha1 for password_hash.

With the sha1 to validate the login did this way:

if((isset($_POST['nome'])) && (isset($_POST['senha']))){

        $usuario = mysqli_real_escape_string($conn, $_POST['nome']); //Escapar de caracteres especiais, como aspas, prevenindo SQL injection
        $senha = mysqli_real_escape_string($conn, $_POST['senha']);
        $senha = sha1($senha);

        //Buscar na tabela usuario o usuário que corresponde com os dados digitado no formulário
        $result_usuario = "SELECT * FROM usuarios WHERE nome = '$usuario' && senha = '$senha' && situacoe_id = '1' LIMIT 1";
        $resultado_usuario = mysqli_query($conn, $result_usuario);
        $resultado = mysqli_fetch_assoc($resultado_usuario);
        ....
        ....
}

But now I’m unable to validate with the format of password_hash, I’m trying this way:

if((isset($_POST['nome'])) && (isset($_POST['senha']))){

        $usuario = mysqli_real_escape_string($conn, $_POST['nome']); //Escapar de caracteres especiais, como aspas, prevenindo SQL injection
        $senha = mysqli_real_escape_string($conn, $_POST['senha']);
        $senha = password_verify($senha);

        //Buscar na tabela usuario o usuário que corresponde com os dados digitado no formulário
        $result_usuario = "SELECT * FROM usuarios WHERE nome = '$usuario' && senha = '$senha' && situacoe_id = '1' LIMIT 1";
        $resultado_usuario = mysqli_query($conn, $result_usuario);
        $resultado = mysqli_fetch_assoc($resultado_usuario);
        ....
        ....
}

But it does not validate. I also tried this way by changing this line $senha = password_hash($senha, PASSWORD_DEFAULT);

  • In order to use the password_verify you have to have saved the password using the password_hash, you did this?

  • @Kayo Bruno Yes, both on the Internet and update level is being saved using password_hash, example of a password $2y$10$NezuGRRDGZQSExsHjtDDnO85AF3/BkqeDYFSOW3c6hNJaMg6Zbe

1 answer

1


The function password_verify receives two parameters and returns a value boolean: true, if the password hash (not from her hash!) passed in the first parameter matches the hash passed in the second, and false otherwise.

Thus, assuming that the field senha table usuarios is a valid hash of the user’s password, the correct use would be:

$usuario = mysqli_real_escape_string($conn, $_POST['nome']);
$senha = mysqli_real_escape_string($conn, $_POST['senha']);

$result_usuario = "SELECT * FROM usuarios WHERE nome = '$usuario' && situacoe_id = '1' LIMIT 1";
$resultado_usuario = mysqli_query($conn, $result_usuario);
$resultado = mysqli_fetch_assoc($resultado_usuario);

if (password_verify($senha, $usuario['senha'])) {
  // Login bem sucedido...
} else {
  // Senhas não conferem...
}

The procedure is as follows:

  • Take the user password hash, stored in the database;
  • Apply password_verify using the received password in the request and the hash we took;
  • Use function return to validate login.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.