Как ограничить пользователя после 3 неудачных попыток входа в форму входа в C#
private void button1_Click(object sender, EventArgs e) { if (txtuser.Text == "" && txtpass.Text == "") { MessageBox.Show("USERNAME and PASSWORD cannot be blank"); txtuser.Focus(); } else { SqlConnection cn = new SqlConnection("Data Source=XYZ;Initial Catalog=CRMS;Integrated Security=True"); cn.Open(); SqlCommand cmd = new SqlCommand("select * from login where username = '" + txtuser.Text + "' and password = '" + txtpass.Text + "'", cn); SqlDataReader dr; dr = cmd.ExecuteReader(); int count = 0; while (dr.Read()) { count += 1; } if (count == 1) { MessageBox.Show("WELCOME!", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information); Home h = new Home(); h.Show(); this.Hide(); } else if (count >= 0) { MessageBox.Show("Wrong Username or Password", "Message", MessageBoxButtons.OK, MessageBoxIcon.Error); } cn.Close(); txtuser.Clear(); txtpass.Clear(); } }
Что я уже пробовал:
Приведенный выше код работает, и никаких проблем вообще нет. Что мне нужно, так это ограничить пользователя после 3 неудачных попыток, и приложение выйдет. Я действительно не знаю, где это реализовать. Любой может помочь, пожалуйста, мне это очень нужно.
Заранее благодарю вас!
PIEBALDconsult
Пожалуйста, используйте параметризованные операторы; не используйте конкатенацию строк для вставки значений в команду.
И, пожалуйста, не помещайте код доступа к данным непосредственно в свой пользовательский код.
Dave Kreskowiak
Что делать, если пользователь вводит пароль, но не имя пользователя? Ваше заявление IF не объясняет ни эту ситуацию, ни наоборот.
Richard Deeming
Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов / OWASP[^]
Richard Deeming
И вы храните пароли в виде простого текста. Вы должны всегда хранить только соленый хэш пароля пользователя.
Безопасная Аутентификация Паролем Объясняется Просто[^]
Соленое хеширование паролей - все правильно[^]