gpt4 book ai didi

php - 检查登录脚本是否允许访客进入?

转载 作者:行者123 更新时间:2023-11-29 09:03:43 25 4
gpt4 key购买 nike

出于某种原因,我的检查登录脚本允许访客进入。

我还没有使该网站上线,所以一切都很好。

我检查数据库中用户在 html 表单中输入的用户名和密码,但由于某种原因,如果它甚至没有得到结果,它仍然将用户名设置为 nil如果它得到结果,它将用户名设置为用户名,但如果它没有得到任何结果,它将用户名设置为空。

我有一个 if 语句,但仍在设置它。

$myusername = mysql_real_escape_string($_POST['myusername']);
$mypassword = mysql_real_escape_string($_POST['mypassword']);


$sql = "SELECT * FROM users WHERE username='$myusername'";
$result = mysql_query($sql) or die(mysql_error());
$battle_get = mysql_fetch_array($result);

if ($battle_get['password'] == $mypassword)
{
$_SESSION['username'] = $myusername ; // store session data
header('Location: http://mydomainname.net/new_rpg/dashboard.php');
} else {
echo "wrong password" ;
}

最佳答案

您不检查用户帐户是否确实存在。您只是盲目地从结果集中获取一行,即使该结果集中没有没有记录。这意味着 $battle_get 将是一个空数组(如果查询失败,则为 bool 值 false)。然后,您可以与提交的密码进行字符串比较。如果该密码也为空,则您正在执行 if (empty == empty) 并繁荣...用户已进入。

你应该做的是:

$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);

$sql = "SELECT ... FROM users WHERE (username = '$username') AND (password = '$password')";
$result = mysql_query($sql) or die(mysql_error());

if (mysql_num_rows($sql) != 1) {
die("Invalid username and/or password"); // don't tell the user which failed.
}

检查返回的行数至关重要 - 如果没有返回行,则用户不存在或密码错误。如果返回 1 行,则这是一次有效的登录。如果返回的行数超过 1 行,则表明数据库中存在重复的用户名/密码对,需要立即修复该问题。

而且,刚刚看到您上面的“md5 很难”评论:您大错特错了。 MD5 非常简单。

当您创建用户记录时,您可以轻松地对密码进行哈希处理:

INSERT INTO users (password) VALUES (MD5('$password'));

以及登录检查:

SELECT ... WHERE (password = MD5('$password'));

根本就没有什么。

关于php - 检查登录脚本是否允许访客进入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7742369/

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