关于PHP参数化查询和密码\u散列的Dubts
我是PHP新手。我使用sha-1在我的数据库中存储密码,我只在存储的sha-1和根据用户插入的密码计算的sha-1之间进行检查。现在我尝试使用password\u hash()和password\u verify() 我对我的代码有一个问题:关于PHP参数化查询和密码\u散列的Dubts,php,mysql,Php,Mysql,我是PHP新手。我使用sha-1在我的数据库中存储密码,我只在存储的sha-1和根据用户插入的密码计算的sha-1之间进行检查。现在我尝试使用password\u hash()和password\u verify() 我对我的代码有一个问题: $user = htmlspecialchars($_POST["username"]); $passw = password_hash($_POST["password"], PASSWORD_DEFAULT); if ($stmt = $
$user = htmlspecialchars($_POST["username"]);
$passw = password_hash($_POST["password"], PASSWORD_DEFAULT);
if ($stmt = $conn->prepare("
SELECT Password
FROM Users
WHERE Username = ?
LIMIT 1
")) {
$stmt->bind_param("s", $user);
$stmt->execute();
$stmt->bind_result($passwDB);
$stmt->fetch();
if( password_verify($passwDB,$passw) ){
if(!isset($_SESSION['login'])){
session_start();
}
$_SESSION['login'] = $user;
}
$stmt->close();
}
$conn->close();
这个代码对吗?目前,我的数据库(sql)中的密码没有哈希。是否有可遵循的最佳实践
Ps:htmlspecialchars()在这种情况下有用吗
谢谢(我的英语很抱歉!)
htmlspecialchars
用于将输出转义到浏览器。散列数据库中的所有密码并删除纯文本sha-1将密码存储在我的数据库中
和我的数据库中的密码(sql)没有散列
似乎相互矛盾。您的方法错误:您需要将密码散列一次,然后将散列存储在数据库中。然后只使用password\u verify()
根据数据库哈希检查POST值。不要使用htmlspecialchars
,除非您想将值输出到html。那么,我应该在数据库中存储salt密码,从php代码中删除password\u hash()?然后,我从DB中获取salt值,并将其与用户插入的密码进行比较,密码为_verify()?但是salted password不应该每次都更改?password_verify()的参数是用户输入的明文密码,然后是数据库中的密码散列,而不是反过来,也不是用户输入的密码的散列,“否”,htmlspecialchars在这里没有用;将输入的数据存储在数据库中;在适当的情况下,在显示数据时使用htmlspecialcharshtmlspecialchars
用于将输出转义到浏览器。散列数据库中的所有密码并删除纯文本sha-1将密码存储在我的数据库中
和我的数据库中的密码(sql)没有散列
似乎相互矛盾。您的方法错误:您需要将密码散列一次,然后将散列存储在数据库中。然后只使用password\u verify()
根据数据库哈希检查POST值。不要使用htmlspecialchars
,除非您想将值输出到html。那么,我应该在数据库中存储salt密码,从php代码中删除password\u hash()?然后,我从DB中获取salt值,并将其与用户插入的密码进行比较,密码为_verify()?但是salted password不应该每次都更改?password_verify()的参数是用户输入的明文密码,然后是数据库中的密码散列,而不是反过来,也不是用户输入的密码的散列,“否”,htmlspecialchars在这里没有用;将输入的数据存储在数据库中;在适当的情况下,在显示数据时使用htmlspecialchars