Я слышал, что «все» используют параметризованные SQL-запросы для защиты от атак SQL-инъекций, не проверяя каждый элемент пользовательского ввода.
Как ты делаешь это? Получаете ли вы это автоматически при использовании хранимых процедур?
Итак, я понимаю, что это не параметризовано:
cmdText = String.Format("SELECT foo FROM bar WHERE baz = '{0}'", fuz)
Будет ли это параметризовано?
cmdText = String.Format("EXEC foo_from_baz '{0}'", fuz)
Или мне нужно сделать что-то более обширное, чтобы защитить себя от SQL-инъекции?
With command
.Parameters.Count = 1
.Parameters.Item(0).ParameterName = "@baz"
.Parameters.Item(0).Value = fuz
End With
Есть ли другие преимущества использования параметризованных запросов помимо соображений безопасности?
Обновление: эта замечательная статья была связана с одним из вопросов, на которые ссылается Grotok. http://www.sommarskog.se/dynamic_sql.html