gpt4 book ai didi

php - 基本密码登录验证

转载 作者:行者123 更新时间:2023-11-29 00:02:45 25 4
gpt4 key购买 nike

所以我有一个基本的数据库,密码仅使用基本的 crypt() 函数进行哈希处理(不是很好的做法,对吧?但仍然如此)。

我现在正在尝试制作一个登录页面。这是我的基本代码。

if (isset($_POST['username'])
&& isset($_POST['input_password'])
&& !empty($_POST['username'])
&& !empty($_POST['input_password'])) {
$username = trim($_POST['username']);
$input_password = trim($_POST['input_password']);

$sql = "SELECT username, password FROM registration WHERE username=? && password=?";

我真的很纠结这个。我可以用基本文本作为密码登录,可以让它工作。但是哈希固有的验证方面让我很困惑。

我知道我需要做一些类似于:

if(crypt($input_password, $db_pass)==$db_pass) //plus the username stuff
echo 'Logged in!';
}

我是否需要先执行单独的 SELECT 查询才能从输入的用户名中获取密码?然后通过 crypt 验证输入的密码与数据库密码?

就像:

$sql = "SELECT username, password FROM registration WHERE username=?";
$stmt = $db -> prepare($sql);
$stmt -> bind_param('s', $username);
$stmt -> execute();

$stmt -> bind_result($db_user, $db_pass);
$stmt -> fetch();

if(crypt($input_password, $db_pass)==$db_pass) //plus the username stuff
echo 'Logged in!';
}else{
echo 'Not logged in';
}

那是正确的方法吗?仅通过用户名直接从数据库中获取密码似乎不太安全。但我想不出任何其他方法。

注意:这不是为了实际使用,只是为了教育。

最佳答案

您不必在if 语句中检查密码是否相同,SQL 查询就足够了。

查看检索到的行数是否 >= 1 就足够了。

最佳做法是在数据库中保存密码的散列版本,然后使用 SELECT 查询来查找用户名和散列密码是否与提供的凭据相同。

关于php - 基本密码登录验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28998226/

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