Поэтому у меня есть небольшая проблема. На веб-сайте, который я разрабатываю, я разрешаю людям вводить адрес, как только они нажимают кнопку сохранения, адрес, который они печатают, сохраняется в моей базе данных.SQL-инъекция с параметризованными запросами в ASP.NET
Я был (ошибочно) под впечатлением, что использование параметризованных запросов поможет предотвратить инъекции SQL, вот мой код, когда они нажмите «сохранить»
SqlConnection Conn = new SqlConnection(@"Data Source=**********;Initial Catalog=********;Persist Security Info=True;User ID=******;Password=*********");
SqlCommand updateMeeting = new SqlCommand(@"UPDATE [*******].[dbo].[**********] SET [email protected], [email protected], [email protected], [email protected] WHERE Title = '" + commands[1] + "' AND Date = '" + Convert.ToDateTime(commands[2]) + "' AND Location = '" + commands[3] + "'", Conn);
updateMeeting.Parameters.AddWithValue("@title", newTitle);
updateMeeting.Parameters.AddWithValue("@date", newDate);
updateMeeting.Parameters.AddWithValue("@location", newLocation);
updateMeeting.Parameters.AddWithValue("@announcement", newBody);
updateMeeting.Connection.Open();
updateMeeting.ExecuteNonQuery();
updateMeeting.Connection.Close();
newTitle, newDate, newLocation и newBody просто строковые переменные взятых из соответствующих текстовых полей.
Будьте уверены, что массив команд дезинфицирован. Это не то, где моя проблема с инъекцией вступает в игру.
и все же, если я ввожу следующее в моем «месте» текстовое поле атака впрыска успешно и ряд добавляется в моей базе данных
');INSERT INTO [********].[dbo].[*********] (Title) VALUES ('Injection'); --
Итак, ясно, что я пропустил что-то, или я не понимая, как работают эти параметризованные запросы. Разве не вся цель этой вещи, чтобы убедиться, что значение VarChar для «местоположения» просто «»), INSERT INTO [****]. [Dbo]. [******] (Title) ЦЕННОСТИ («Впрыск») - «
Не следует ли атака впрыска не удалась?
'И Местоположение =«»+ команды [3]' Это не параметризация, просто нормальная конкатенации Так кто-то может написать что-нибудь – lad2025
Ваш весь 'WHERE' статья использует конкатенацию.. – Greg
Каково значение 'commands [3]', когда выполняется оператор с попыткой инъекции? –