saimanisha Ответов: 2

Как проверить, совпадают ли имя пользователя и пароль, которые уже хранятся в базе данных SQL server, с помощью кода C#


если имя пользователя и пароль совпадают, то только человек должен иметь возможность войти в систему.в противном случае неверный пароль или имя пользователя (они не совпадают, которые уже хранятся в базе данных)

Что я уже пробовал:

Объект sqlconnection кон = новое sqlconnection(@"источник данных=рабочий стол-T09HLQF;начальный каталог=HMIS_LOGIN_SCREEN ;пароль=секрет;Комплексная безопасность=истина;");
против.Открыть();
Строка s = "выбрать количество(*) из HOME_LOGIN-страницы, где пользователь='" + текстовое поле textbox1.Текст + "' и пароль='" + поле textbox2.Текст + " '";
// Username=' "+ Username + "' и Password=' " + Password +"'"
SqlCommand cmd = new SqlCommand(s, con);
против.Открыть();
Объект obj = cmd.Executescalar так();
против.Закрывать();
if (obj != null)
{
этот.Скрыть();
Form2 f = новая форма 2();
Ф.Показать();
}
ещё
{
Ящик для сообщений.Показать ("извините, имя пользователя или пароль недействительны");
}

Richard MacCutchan

Итак, вы храните пароли в своей базе данных в виде открытого текста. Пожалуйста, дайте нам знать, в какой организации вы работаете, чтобы мы могли гарантировать, что никогда не будем иметь с ней дела.

Philippe Mori

В дополнение к другим комментариям, сделайте некоторое усилие, когда вы задаете вопрос. Правильный формат кода обычно занимает меньше нескольких секунд.

Очевидно, что вы не должны делать код аутентификации, пока не узнаете о SQL-инъекции и правильном хэшировании паролей...

2 Ответов

Рейтинг:
5

sarathtamil

строка запроса="выбрать имя_пользователя,пароль от HOME_LOGIN-страницы, где пользователь='"+текстовое поле textbox1.Текст+"' и пароль='"+поле textbox2.Текст+"'";
SqlCommand cmd=new SqlCommand(query, con);
SqlDataReader dr=cmd.Метода executereader();
если (dr. Read())
{
этот.Скрыть();
Form2 f = новая форма 2();
Ф.Показать();
}
ещё
{
Ящик для сообщений.Show ("неверный логин");
}


CHill60

Никогда не используйте сцепленные строки для создания команд Sql. Используйте параметризованные запросы. Если вы собирались глупо хранить пароли в обычном тексте, то этот код должен быть

string query="Select USER_NAME,PASSWORD From HOME_LOGIN-PAGE where USER_NAME=@log and PASSWORD=@pass";
SqlCommand cmd=new SqlCommand(query,con);
cmd.Parameters.AddWithValue("@log", textBox1.Text);
cmd.Parameters.AddWithValue("@pass", textBox2.Text);
SqlDataReader dr=cmd.ExecuteReader();

Но вы никогда, никогда не храните пароли в виде открытого текста. См. ссылки в решении 1, чтобы узнать, как это сделать правильно

Рейтинг:
2

OriginalGriff

Только не так!
Во-первых, потому что этот код широко открыт для злоупотреблений: никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы. Конкатенация в вашем логине означает, что любой человек может обойти вашу безопасность, если захочет, возможно, притвориться вами или удалить вашу базу данных, просто набрав текстовое поле.
Во - вторых, потому что вы никогда не должны хранить пароли в открытом тексте-это серьезная угроза безопасности. Здесь есть некоторая информация о том, как это сделать: Хранение паролей: как это сделать.[^]
Также смотрите здесь: Количество Преступлений Код 1[^]

И кстати:
1) Сделайте себе одолжение и перестаньте использовать имена Visual Studio по умолчанию для всего - вы можете помнить, что" TextBox8 " - это номер мобильного телефона сегодня, но когда вам придется изменить его через три недели, вы тогда это сделаете? Используйте описательные имена - например, "tbMobileNo" - и ваш код станет легче читать, более самодокументируемым, более легким в обслуживании-и на удивление быстрее кодировать, потому что Intellisense может добраться до" tbMobile "за три нажатия клавиш, где" TextBox8 " занимает размышление и 8 нажатий клавиш...
2) также не "жестко кодируйте" строки соединений. Всегда храните их в файлах конфигурации или настроек.
3) соединения и команды-это дефицитные ресурсы: они должны быть закрыты и утилизированы, когда вы закончите с ними. Я бы предложил using блок для обоих.