Как установить различные пути входа в систему в зависимости от предоставленных учетных данных пользователя?
Привет, у меня есть страница входа в систему, и я хочу, чтобы если предоставленные учетные данные пользователя принадлежат администратору(Username = Administrator), то должна открыться страница приложения формы окна под названием "AdminPage". В противном случае должно открыться другое приложение оконной формы под названием "Main_Page".
Что я уже пробовал:
try { SqlConnection cn = new SqlConnection("Data Source=PV10\\LOCALSERVER;Initial Catalog=SmallSoftwareDB;Integrated Security=True;Pooling=False"); SqlCommand cmd = new SqlCommand("select * from UserCredentials where Username='" + textBox1.Text + "' and Password='" + textBox2.Text + "'", cn); SqlDataReader dr; cn.Open(); dr = cmd.ExecuteReader(); int cnt = 0; while (dr.Read()) { cnt++; } if (cnt == 1) { MessageBox.Show("Successful Login...", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information); string query = "select Username, Password from UserCredentials where Username='Administrator"; SqlCommand cmdA = new SqlCommand(query, cn); dr = cmdA.ExecuteReader(); int k = 0; while (dr.Read()) { k++; } if (k == 1) { AdminPage A_P = new AdminPage(); A_P.Tag = this; A_P.Show(this); Hide(); } Main_Page Mp = new Main_Page(); Mp.Tag = this; Mp.Show(this); Hide(); cn.Close(); textBox1.Clear(); textBox2.Clear(); } else { MessageBox.Show("Invalid UserName or Password", "Message", MessageBoxButtons.RetryCancel, MessageBoxIcon.Warning); textBox1.Clear(); textBox2.Clear(); } } catch (Exception err) { MessageBox.Show(err.Message, " ", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
Richard Deeming
Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов / OWASP[^]
Richard Deeming
Вы также храните пароли в виде обычного текста. Это крайне плохая идея. Вы всегда должны хранить только соленый хэш пароля пользователя, используя уникальную соль для каждой записи.
Безопасная Аутентификация Паролем Объясняется Просто[^]
Соленое хэширование паролей - все правильно[^]