MySQL检查用户名和密码是否与数据库匹配

Wil*_*ans 3 php mysql authentication hash-function password-storage

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

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

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

谢谢

小智 10

//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!");
Run Code Online (Sandbox Code Playgroud)

  • 对于遇到此问题的任何人,请在存储密码时不要使用md5. (2认同)

Arr*_*und 9

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

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

SELECT COUNT(UserName)
  FROM TableName
 WHERE UserName = 'User' AND
       Password = 'Pass'
 LIMIT 0, 1
Run Code Online (Sandbox Code Playgroud)


Fal*_*con 7

1.)存储数据库密码使用某种哈希值,然后更改哈希值,对其进行模糊处理,例如为每个字节添加一个不同的值.这样你的密码可以防止字典攻击和彩虹表.

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

然后查询应如下所示:

select hashedPassword from users where username=?
Run Code Online (Sandbox Code Playgroud)

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

进一步的问题?

  • 伙计,看看他最近的问题吧.我担心只有完整和完整的代码才有帮助:) (3认同)