我正在创建一个登录表单。我正在学习如何使用SHA-1加密密码。我使用SHA-1加密用户在注册期间创建的密码。在数据库中,我输入了假装的用户名和密码数据,以便有一些工作。我在登录表单上工作时遇到了问题。
// Database Connection
$con = getConnection();
$sqlQuery = mysql_query("SELECT count(*) from Customers
WHERE Email = '$email' and Password = sha1('$passLogin')")
// Executing query
$result = $con->mysql_result($sqlQuery, "0");
if ($result == 0) {
echo "Can not login, try again.";
} else {
echo "Login Good!";
}
答案 0 :(得分:2)
我正在学习如何使用sha1 加密密码。
...使用sha1来哈希密码。哈希与加密不同。加密是可逆的,哈希则不是。 (或不应该)。现在,......
您必须确保数据库中的密码经过哈希处理。
通常你在PHP端进行散列。
你应该使用腌制来使彩虹表攻击变得不可行。阅读Just Hashing is Far from Enough for Storing Password
那就是说,我会像这样做认证部分:
$hashedAndSalted = sha1($passLogin . $yourSalt);
$sqlQuery = mysql_query("SELECT Email FROM Customers WHERE Email = '$email' AND Password = '$hashedAndSalted'");
if (mysql_num_rows($sqlQuery) == 1) {
echo 'Login successful';
} else {
echo 'Could not login';
}
答案 1 :(得分:0)
另请注意,如果您尚未清理表单输入,则可以SQL injection开放。
如果用户在“电子邮件”字段中输入以下内容:
' or '1'='1
他们将登录:)
您应该使用mysql_real_escape_string来逃避$email
和$passLogin
,甚至更好地使用预先准备好的陈述。
答案 2 :(得分:0)
用以下内容替换您的查询:
$sqlQuery = mysql_query("SELECT count(*) from Customers
WHERE Email = '".$email."' and Password = '".sha1($passLogin)."'");
请记住要始终手动连接字符串和变量,不要依赖PHP来为您完成。此外,您忘记了该行后面的分号;
。每行必须在PHP中附加分号。