Вставка в БД с параметрами, безопасными от внедрения SQL? - PullRequest
10 голосов
/ 15 марта 2011

Я немного читал об 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

Я выбираю последнюю часть, чтобы сделать сообщение короче, остальное просто пытается поймать исключения и закрыть соединение с БД, а также предоставить обратную связь с пользователем об успешной вставке.

Ответы [ 3 ]

11 голосов
/ 15 марта 2011

Ваш код в порядке, он защищен от внедрения, поскольку значения передаются как параметры, а не как строковые литералы. Однако, если вы пишете этот тип доступа к данным самостоятельно, рассматривали ли вы создание SqlParameter объектов и явную установку типа, размера и т. Д. И добавление параметров в команду? AddWithValue будет работать просто отлично, но SQL Server должен будет определить тип, небольшие, но ненужные накладные расходы.

1 голос
/ 15 марта 2011

Да, это достаточно безопасно.Пока вы не используете «продезинфицированные» переменные из подготовленного оператора для генерации динамического sql позже, вы обычно в порядке.Тот факт, что вы используете подготовленный оператор, позаботится о работе с escape-символами и другими простыми методами внедрения.

Хотя я бы не отказался ни от какой другой проверки ...

1 голос
/ 15 марта 2011

Ну, вы всегда можете попытаться вставить SQL-оператор в текстовое поле, что, вероятно, даст вам более быстрый и определенный ответ.

...