Как предотвратить внедрение SQL на странице входа, когда SQL Server Compact Edition используется в качестве базы данных

Ниже приведен один из моих старых кодов. Он использует SQL CE в качестве базы данных. Я хочу предотвратить внедрение sql в этот код. Для предотвращения инъекции sql мне нужно параметризовать sql-запрос. Я не знаю, как использовать эти параметры в коде. Как я могу его пересмотреть?

SqlCeConnection con = new SqlCeConnection();
sqlcon.ConnectionString = @"Data Source=dbLogin.sdf;
string query = "select * from [Login] where username = @user AND password = @pass";
SqlCeCommand myCMD = new SqlCeCommand();
myCMD.Connection = sqlcon;
myCMD.CommandText = query;
myCMD.Parameters.Add("@user", Username.Text);
myCMD.Parameters.Add("@pass", Password.Text);

SqlCeDataAdapter sda = new SqlCeDataAdapter(query, con);
DataTable dt = new DataTable();
sda.Fill(dt);
if (dtbl.Rows.Count == 1)
{
    Main objMain = new Main();
    this.Hide();
    objMain.Show();
}
else
{
    MessageBox.Show("Invalid Username or Password", "Access Denied", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}

Вам нужно пометить язык программирования, который вы используете. Тогда дайте нам знать, что насчет обилия документации и статей, которые вы не поняли по этому вопросу; параметризация - очень хорошо задокументированная тема.

Larnu 09.04.2022 09:23

Я добавил свой язык программирования. Это С#.

Code Lover 09.04.2022 09:23

@Larnu Я обновил свой пост. Я попытался параметризовать его. Как я могу заполнить данные, используя новый параметризованный запрос?

Code Lover 09.04.2022 09:33

Почему вы используете AddWithValue? Вопрос, на который я дал ссылку, показывает Parameters.Add. Можем ли мы уже отказаться от использования AddWithValue()?, хотя теперь вы полностью изменили вопрос: ваш заголовок не отражает ваши новые цели.

Larnu 09.04.2022 09:37

На ваш новый вопрос, опять же, что вы не поняли в информации уже там?

Larnu 09.04.2022 09:42

@Larnu Я изменил это на Add(). Когда я отлаживаю, он не может заполнить таблицу данных и выдает ошибку в строке sda.Fill(dtbl); и говорит: 'A parameter is missing. [ Parameter ordinal = 2 ]'

Code Lover 09.04.2022 09:43

Кроме того, в качестве примечания ваш код подразумевает, что вы храните пароли в виде открытого текста: никогда сделайте это. Солите и хэшируйте свои пароли, когда вы их сохраняете.

Larnu 09.04.2022 09:43

Вы не используете созданную вами команду SqlCeCommand SqlCeDataAdapter sda = new SqlCeDataAdapter(query, sqlcon); — ссылка на myCommand отсутствует, поэтому параметры в вашем запросе не разрешаются.

Anand Sowmithiran 09.04.2022 09:50

изменить на SqlCeDataAdapter sda = new SqlCeDataAdapter(myCommand);

Anand Sowmithiran 09.04.2022 09:52
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
10
25
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны передать команду с определенными и заполненными параметрами в SqlCeDataAdapter, вы пропустили это.

измените свой код на приведенный ниже,

SqlCeConnection sqlcon = new SqlCeConnection();
sqlcon.ConnectionString = @"Data Source=dbLogin.sdf; password =rss900";
string query = "select * from [tblLogin] where username = @user AND password = @pass";
SqlCeCommand myCommand = new SqlCeCommand();
myCommand.Connection = sqlcon;
myCommand.CommandText = query;
myCommand.Parameters.Add("@user", txtUsername.Text);
myCommand.Parameters.Add("@pass", txtPassword.Text);

SqlCeDataAdapter sda = new SqlCeDataAdapter(myCommand);
DataTable dtbl = new DataTable();
sda.Fill(dtbl);
if (dtbl.Rows.Count == 1)
{
    Main objfrmMain = new Main();
    this.Hide();
    objfrmMain.Show();
}
else
{
    MessageBox.Show("Invalid Username or Password", "Access Denied", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}

Другие вопросы по теме