我有一些代码可以验证登录的用户名和密码(不要对我大喊大叫,我已经使用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");
}
更新:我忘了提及,我回复了$ verif_query并针对phpmyadmin运行它,它返回了1行。对不起,我的问题并不全面。
UPDATE2:我在输入问题时搞砸了代码示例。我确实验证了数据库连接,我确实在查询中包含了$ DB。再次,抱歉这个坏问题。
答案 0 :(得分:1)
当你这样做时:
mysqli_fetch_assoc(
mysqli_query(
"SELECT salt FROM users WHERE "
. "username = \"" . $_POST['user'] . "\""
)
)
您实际上是获取关联数组,而不是用户的盐作为字符串。如果用户的盐是“盐”,这就是你将得到的:
Array
(
[salt] => the-salt
)
当连接用户密码(例如'the-password')和该数组时,您将获得:
the-passwordArray
由于用于验证的密码哈希将由该字符串构成,查询将(很可能)不匹配任何内容,并且您将不会从验证查询返回任何行。
答案 1 :(得分:0)
在die()之前使用它并告诉我们你得到的错误
echo mysqli_errno($this->db_link);