gpt4 book ai didi

PHP 输入密码与 Hashed DB 密码匹配

转载 作者:行者123 更新时间:2023-12-02 04:33:14 24 4
gpt4 key购买 nike

我创建了一个系统,可以在用户注册时验证用户,将邮件发送到他们的电子邮件地址,并且当单击邮件中的链接时,帐户就会被激活。我的问题是,当尝试使用电子邮件和输入密码登录时,它会抛出错误,但是当我将 10 个字符的随机字符串散列密码复制到密码输入中时,它会获得访问权限...我的问题是“请问我该如何做?”使输入密码与散列密码匹配?”……我尝试在此处发布脚本,但我不知道这里是如何完成的

提前致谢!

最佳答案

@vTp 指的是执行 MySQL 查询的旧的不安全方法,但它会导致一大堆 SQL 注入(inject),因此请使用 prepared statements,它使用 MySQL 的自动转义类型转换变量。

我的建议:

# Database credentials
$mysqlsrv = "localhost";
$mysqlusr = "myusr";
$mysqlpsw = "mypsw";
$mysqldb = "mydb";

# Connect to database in the secure "prepared statement" way
$mysqli = new mysqli($mysqlsrv,$mysqlusr,$mysqlpsw,$mysqldb);

# Check for database connection errors
if(mysqli_connect_errno()) {
echo "Cannot connect to database";
exit();
}

# The user credentials (this could be from $_REQUEST or alike)
$username = "myuser";
$password = "123456";

# Encrypt the password
$password = sha1($password); # or whatever you are using - maybe md5

$query = "SELECT userId FROM users WHERE usr=? AND psw=?";
if($stmt = $mysqli->prepare($query)) {
$stmt->bind_param("ss",$username,$password); # gets two strings as input. Use "i" for integer input instead of "s"
$stmt->execute();
$stmt->bind_result($userId);

# Check if the resultset from database is not empty
if($stmt->fetch()) {
echo "Found userID $userId";
} else {
echo "Could not find any users matching credentials";
}

$stmt->close();
}

您还可以让 MySQL 对明文密码进行编码 - 类似于:

$query = "SELECT userId FROM users WHERE usr=? AND psw=SHA1(?)";

另一种方法(如果您使用 @vTp 方法)可能是从数据库中获取所有用户名和加密密码(不选择 WHERE 子句),然后检查是否存在匹配项返回的行。通过这种方式,您也可以避免 SQL 注入(inject),但这不是最好的方法(并且只能解决此特定查询的问题)。

关于PHP 输入密码与 Hashed DB 密码匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22575890/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com