sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo uso el hash de contraseña con PDO para que mi código sea más seguro?

Solo usa una biblioteca. En serio. Existen por una razón.

No lo hagas tú mismo. Si estás creando tu propia sal, LO ESTÁS HACIENDO MAL . Debería usar una biblioteca que maneje eso por usted.

$dbh = new PDO(...);

$username = $_POST["username"];
$email = $_POST["email"];
$password = $_POST["password"];
$hash = password_hash($password, PASSWORD_DEFAULT);

$stmt = $dbh->prepare("insert into users set username=?, email=?, password=?");
$stmt->execute([$username, $email, $hash]);

Y al iniciar sesión:

$sql = "SELECT * FROM users WHERE username = ?";
$stmt = $dbh->prepare($sql);
$result = $stmt->execute([$_POST['username']]);
$users = $result->fetchAll();
if (isset($users[0]) {
    if (password_verify($_POST['password'], $users[0]->password) {
        // valid login
    } else {
        // invalid password
    }
} else {
    // invalid username
}