我正在处理留言板,我刚刚启动它,现在正在处理登录功能。我有一个问题。每当我尝试获取数据时,它都会返回任何内容,或者返回“1”。鉴于我是将ISQL与PHP集成的新手,我不知道最新情况。如果你能帮我弄清楚我做错了什么就会很棒。
$query = mysql_query("
SELECT * FROM users WHERE username='$username'
");
while ($row = mysql_fetch_assoc($query)){
$dbID = $row['id'];
$dbUser = $row['username'];
$dbPass = $row['password'];
}
if ($dbUser = $username && $dbPass = $password) {
//if user and pass match do stuff
$_SESSION['username'] = $dbUser;
$_SESSION['id'] = $dbID;
$_SESSION['ip'] = $_SERVER['HTTP_USER_AGENT'];
header("Location: messageboard.php");
}
else {
//if user and pass dont match do stuff
$_SESSION['loginError'] = "Your username and password do not match";
header("Location: login.php");
}
所有代码都返回 - ID: 用户名:1 IP:Mozilla / 5.0(Windows NT 6.2; WOW64)AppleWebKit / 537.36(KHTML,像Gecko)Chrome / 28.0.1500.95 Safari / 537.36
答案 0 :(得分:0)
首先,正如andrewsi所述:$dbUser = $username && $dbPass = $password
应使用==
来比较值。
第二:像这样做非常脆弱。
首先,您似乎已将密码存储在“明文”中,因此您可以使用直接比较。不要这样做。存储(盐渍或胡椒)哈希,并将用户输入与该哈希进行比较!
第二:您正在使用WHILE-Loop(while ($row = mysql_fetch_assoc($query)){
)来设置用户数据。这不是必需的,因为一个用户名应该只有一组数据。
第三:您在查询中使用$username
。您的示例不包含$username
的生成,但根据我在源代码中看到的内容,它很可能看起来像$username = $_POST["username"]
。
因此,此时,One可能能够以接收有效登录的方式修改输入的用户名,即使不是。 (SQL注入)。
转义用户输入(在将MySQL_real_escape_string()
传递给SQL查询之前使用{{1}}。