【问题标题】:MySQL Check if username and password matches in DatabaseMySQL 检查数据库中的用户名和密码是否匹配
【发布时间】:2011-03-12 20:46:12
【问题描述】:

我有一个表单,它有一个带有名称属性 username 的文本框和另一个带有名称属性 password 的文本框。 我还有一个数据库,其中包含名为 userpass 的列。当我的用户注册时,它会将用户名添加到 user 列,并将密码添加到 pass 列。

我将如何进行 MySQL 查询以检查表单是否提交了正确的用户名和密码,然后如果它确实有一个分支让我输入代码是否成功?

我真的需要一些代码,这一点进展不顺利,我知道它应该类似于SELECT * FROM table WHERE username == $username AND...,但后来我被卡住了,因为我在数据库中有一个 MD5 密码,而第一位可能是错误的。请帮忙。 :)

谢谢

【问题讨论】:

  • 只是小费。不要在数据库中以明文形式存储密码,这是不安全的。使用某种哈希值。
  • 您能告诉我们到目前为止您为此任务编写的代码吗?

标签: php mysql authentication hash-function password-storage


【解决方案1】:
//set vars
$user = $_POST['user'];
$pass = md5($_POST['pass']);

if ($user&&$pass) 
{
//connect to db
$connect = mysql_connect("$server","$username","$password") or die("not connecting");
mysql_select_db("users") or die("no db :'(");
$query = mysql_query("SELECT * FROM $tablename WHERE username='$user'");

$numrows = mysql_num_rows($query);


if ($numrows!=0)
{
//while loop
  while ($row = mysql_fetch_assoc($query))
  {
    $dbusername = $row['username'];
    $dbpassword = $row['password'];
  }
  else
      die("incorrect username/password!");
}
else
  echo "user does not exist!";
} 
else
    die("please enter a username and password!");

【讨论】:

  • 遇到这种情况的人请不要在存储密码时使用md5。
  • 您不需要选择表格中的所有列,因为您只需要密码。此外,在这个查询中,只返回匹配用户名的记录,然后他再次比较用户名。
  • 现在是 2017 年,这是旧代码。不使用。改用mysqli
【解决方案2】:

您可以限制一列 count(UserName) 的计数,而不是选择 count count(*) 中的所有列。

您可以使用 Limit 0,1 将整个搜索限制为一行

SELECT COUNT(UserName)
  FROM TableName
 WHERE UserName = 'User' AND
       Password = 'Pass'
 LIMIT 0, 1

【讨论】:

    【解决方案3】:

    1.) 数据库密码的存储 使用某种带有盐的散列,然后更改散列,对其进行混淆,例如为每个字节添加一个不同的值。这样一来,您的密码就可以免受字典攻击和彩虹表的攻击。

    2.) 要检查密码是否匹配,请为用户输入的密码创建哈希值。然后对数据库执行用户名查询,并检查两个密码哈希值是否相同。如果是,请给用户一个身份验证令牌。

    查询应如下所示:

    select hashedPassword from users where username=?
    

    然后将密码与输入进行比较。

    还有其他问题?

    【讨论】:

    • 老兄,看看他最近的问题。恐怕只有完整和完整的代码会有所帮助:)
    • 好吧,我给了他一些可以深入研究的东西。如果他问,我会帮助并进一步向他解释。
    • 0_0 我真的需要一些代码,这有点不顺利我知道它应该类似于 SELECT * FROM table WHERE username == $username AND... 但后来我被卡住了,因为我在数据库中有一个 MD5 密码....而且第一位可能是错误的。请帮忙:)
    猜你喜欢
    • 2017-01-02
    • 1970-01-01
    • 2018-03-30
    • 2018-05-12
    • 2014-12-01
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    • 2014-05-20
    相关资源
    最近更新 更多