Php 用户身份验证(使用sha1)
我正在创建一个登录表单。我正在学习如何使用SHA-1加密密码。我使用SHA-1加密用户在注册期间创建的密码。在数据库中,我输入了假装的用户名和密码数据,以便进行处理。我在使用我的登录表单时遇到问题Php 用户身份验证(使用sha1),php,sql,encryption,Php,Sql,Encryption,我正在创建一个登录表单。我正在学习如何使用SHA-1加密密码。我使用SHA-1加密用户在注册期间创建的密码。在数据库中,我输入了假装的用户名和密码数据,以便进行处理。我在使用我的登录表单时遇到问题 // Database Connection $con = getConnection(); $sqlQuery = mysql_query("SELECT count(*) from Customers WHERE Email = '$email
// 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!";
}
另请注意,如果您尚未对表单输入进行消毒,您将完全开放 如果用户为电子邮件字段输入以下内容:
' or '1'='1
他们将登录:)
您应该使用转义$email
和$passLogin
或者更好地使用准备好的语句
我正在学习如何使用sha1
加密密码
。。。使用sha1散列密码。哈希与加密不同。加密是可逆的,散列不是。(或者不应该)。现在
$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';
}
将您的查询替换为以下内容:
$sqlQuery = mysql_query("SELECT count(*) from Customers
WHERE Email = '".$email."' and Password = '".sha1($passLogin)."'");
请记住,始终手动连接字符串和变量,不要依赖PHP来完成这项工作。另外,您忘记了分号
代码>在那一行之后。在PHP中,每一行都必须附加一个分号。您确定数据库中的密码已经过哈希处理了吗?在PHP而不是MySQL中进行散列也是很常见的。别忘了使用随机salt,以确保相同的密码被散列到不同的人的不同值。@philfreo,我对使用SHA1非常陌生。我在数据库中看到的内容看起来已经散列了。当我填写自己的登记表时,我做了一些假账。在数据库中存储的密码不是我编写的密码,而是随机字符和数字的40个字符长。请考虑Sa1是否真的是正确的使用。“Rainbow表已经足够了:您需要了解的关于安全密码方案的内容”这篇文章值得思考:不,不是这样,字符串中的sha1()不会执行该方法。是的。您将始终生成相同的散列,因为您正在散列常量。还有,“记住总是手动连接字符串和变量,不要依赖PHP来为您实现这一点。”?这是一个糟糕的建议。这不是一个糟糕的建议,因为它可以防止错误。它没有散列常量,虽然我编辑它之前的代码散列了错误的密码,但它不是常量:例如:$foo='bar';回音“$foo”;输出‘bar’(带引号)@Andrew当然是常数。单引号中的变量不进行插值。Touche。这就是我使用“.”运算符连接的原因。您如何知道$email
和$passLogin
尚未正确清理?