PHP的MySQL密码比较

时间:2011-08-02 13:03:48

标签: php mysql passwords

下午啊。基本上我有一个带登录表单的页面,要求用户输入他们的用户名和密码。然后我将这些用户名和密码的散列版本与MySQL中的密码数据库相匹配。

现在,由于我不知道黑客/演示者能够做什么,我只想永远不要从数据库中检索正确密码的哈希版本并在服务器上进行比较。我已经搜索了谷歌和MySQL教程网站,但我似乎无法得到一个明确的答案(我可能会在浅水中溺水)。基本上这就是我想要做的事情:

  • 用户输入用户名+密码。
  • 我通过存储过程将此信息转发给MySQL。
  • 如果找到匹配项,则存储过程返回TRUE / FALSE(1或0无关紧要)。

非常感谢你的时间。

2 个答案:

答案 0 :(得分:1)

我不太确定你追求的是什么,但如果我理解了这个问题,你想做这样的事情:

SELECT password FROM users WHERE username = '$username';

然后将密码与PHP进行比较,您担心这可能会成为安全问题。

我认为这在安全方面没有任何区别。检查密码是否正确的常用方法是:

SELECT COUNT(*) FROM users WHERE username = '$username' AND password = '$hashedPassword';

如果count == 1,则用户提供了正确的密码。如果密码不匹配,您可以看到MySQL在任何时候都没有提供实际密码。即使它确实如此,黑客也几乎不可能访问该信息。如果他们可以,他们已经劫持了你的服务器,这是你遇到的最少的问题。

答案 1 :(得分:0)

将凭据发送到数据库时,只需使用mysql_real_escape_string即可。这将阻止SQL注入。

<?php
// Connect
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
    OR die(mysql_error());

// Query
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
            mysql_real_escape_string($user),
            mysql_real_escape_string($password));
?>

http://www.php.net/manual/en/function.mysql-real-escape-string.php