Вставка в БД с безопасными параметрами от SQL-инъекции?
Я немного читал о SQL-инъекции, и я хочу быть уверенным, что мой код позволяет сказать "безопасно" от него, я планировал использовать валидаторы RegExp для проверки ввода пользователя, но другое сообщение здесь предлагалось только с использованием параметризованных запросов, ну, я использую их, но я хочу быть уверен, что мой код в безопасности, не так ли?
using ( SqlConnection dataConnection = new SqlConnection(myConnectionString) )
{
using ( SqlCommand dataCommand = dataConnection.CreateCommand() )
{
dataCommand.CommandText = "INSERT INTO Lines (Name, CreationTime) " +
"VALUES (@LineName, @CurrentDateTime)";
dataCommand.Parameters.AddWithValue("@LineName", TextBox2.Text);
dataCommand.Parameters.AddWithValue("@CurrentDateTime", DateTime.Now.ToString());
dataConnection.Open();
//do other DB stuff
Я отрубаю последнюю часть, чтобы сделать пост короче, остальное просто пытается и ловит исключения и закрывает соединение db, а также обеспечивает обратную связь с пользователем при успешной вставке.
Ответы
Ответ 1
Ваш код в порядке, он защищен от инъекций, потому что значения передаются как параметры, а не строковые литералы. Однако, если вы пишете этот тип доступа к данным самостоятельно, подумали ли вы о создании объектов SqlParameter и явно указали тип, размер и т.д. И добавили параметры в команда? AddWithValue будет работать нормально, но SQL Server должен будет определить тип, немного, но ненужные служебные данные.
Ответ 2
Ну, вы всегда можете попробовать ввести инструкцию SQL в текстовое поле, которое, вероятно, даст вам более быстрый, определенный ответ.
Ответ 3
Да, это разумно безопасно. До тех пор, пока вы не используете "обработанные" переменные из подготовленного оператора для генерации динамического sql позже, вы обычно в порядке. Тот факт, что вы используете подготовленный оператор, позаботится о том, чтобы справиться с escape-символами и другими простыми способами инъекции.
Я бы не отказался от какой-либо другой проверки, хотя...