我有一些代码,应该用来验证登录的用户名和密码(不要对我大喊大叫,我已经在代码的早期使用GUMP清理了字符串):
$verif_query="SELECT * FROM users WHERE username = "".$_POST['user']."" AND password = "".hash("sha512",$_POST['passwd'].mysqli_fetch_assoc(mysqli_query($DB,"SELECT salt FROM users WHERE username = "".$_POST['user']."""))).""";
$userpass_verif = mysqli_query($DB,$verif_query);
if(mysqli_num_rows($userpass_verif) <= 0){
die("Invalid un/pass");
}
更新:我忘了提一下,我回显了$verify_query并针对phpmyadmin运行它,它返回了1行。对不起,我的问题不全面。
更新2:我在输入问题时把代码示例搞砸了。我确实验证了DB连接,并且在查询中包含了$DB。再次,对于这个糟糕的问题,我感到抱歉。
当你这样做时:
mysqli_fetch_assoc(
mysqli_query(
"SELECT salt FROM users WHERE "
. "username = "" . $_POST['user'] . """
)
)
实际上,您得到的是一个关联数组,而不是作为字符串的用户salt。如果用户的盐是"盐",这就是你将得到的:
Array
(
[salt] => the-salt
)
当连接用户密码(例如"密码")和该数组时,您将得到:
the-passwordArray
由于用于验证的密码哈希将由该字符串组成,因此查询(很可能)与任何内容都不匹配,也不会从验证查询中返回任何行。
使用this before die()并告诉我们您得到的错误
echo mysqli_errno($this->db_link);