MySQL密码比较从PHP


MySQL password comparison from PHP

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

现在,鉴于我不知道黑客/曝光者有什么能力,我只是想永远不要从数据库中检索正确密码的散列版本,并在服务器上进行比较。我已经搜索了谷歌和MySQL教程网站,但我似乎不能得到一个明确的答案(我可能在这里淹死在浅水)。基本上这就是我想要做的:

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

感谢您的宝贵时间。

我不太确定你在找什么,但如果我理解正确的话,你想做这样的事情:

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

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

我不认为从安全的角度来看有什么不同。检查密码是否正确的常用方法是:

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

如果count == 1,用户给出了正确的密码。您可以看到,如果密码不匹配,MySQL在任何时候都不会给出实际的密码。即使有,黑客也几乎不可能获得这些信息。如果他们可以,他们已经劫持了你的服务器,这是你最小的问题。

在向数据库发送凭据时仅使用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