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