MySQL Проверьте, совпадают ли имя пользователя и пароль в базе данных

У меня есть форма, которая имеет текстовое поле с именем атрибута имени пользователя и еще одно с именем атрибута пароля. У меня также есть база данных со столбцами под названием user и pass. Когда мои пользователи зарегистрировались, он добавил имя пользователя в столбец пользователя и пароль в столбце прохода.

Как я могу сделать запрос MySQL, чтобы проверить, что форма предоставила правильное имя пользователя и пароль, а затем, если есть ветка, чтобы я мог ввести код, если это удалось?

Мне действительно нужно немного кода, этот бит не очень хорошо, я знаю, что это должно быть что-то вроде SELECT * FROM table WHERE username == $username AND... но потом я застрял, потому что у меня есть пароль MD5 в базе данных, и этот первый бит, вероятно, неправильно. Пожалуйста помоги.:)

Спасибо

3 ответа

Решение

1.) Хранение паролей базы данных. Используйте какой-то хеш с солью, а затем измените хеш, запутайте его, например, добавьте отдельное значение для каждого байта. Таким образом, ваши пароли будут надежно защищены от словарных атак и радужных таблиц.

2.) Чтобы проверить, совпадает ли пароль, создайте хэш для пароля, введенного пользователем. Затем выполните запрос к базе данных для имени пользователя и просто проверьте, идентичны ли два хэша пароля. Если они есть, дайте пользователю маркер аутентификации.

Запрос должен выглядеть следующим образом:

select hashedPassword from users where username=?

Затем сравните пароль со входом.

Дальнейшие вопросы?

//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!");

Вместо выбора всех столбцов в счетчике (*) вы можете ограничить количество столбцов (UserName).

Вы можете ограничить весь поиск одной строкой, используя Предел 0,1

SELECT COUNT(UserName)
  FROM TableName
 WHERE UserName = 'User' AND
       Password = 'Pass'
 LIMIT 0, 1
Другие вопросы по тегам