Ваш пример EXEC НЕ будет параметризован. Вам нужны параметризованные запросы (подготовленные операторы в некоторых кругах), чтобы не допустить повреждения подобного ввода:
'; DROP TABLE bar; -
Попробуйте добавить это в переменную fuz (или не делайте, если вы цените свою таблицу баров). Также возможны более тонкие и разрушительные запросы.
Вот пример того, как вы делаете параметры с Sql Server:
Public Function GetBarFooByBaz(ByVal Baz As String) As String
Dim sql As String = "SELECT foo FROM bar WHERE baz= @Baz"
Using cn As New SqlConnection("Your connection string here"), _
cmd As New SqlCommand(sql, cn)
cmd.Parameters.Add("@Baz", SqlDbType.VarChar, 50).Value = Baz
Return cmd.ExecuteScalar().ToString()
End Using
End Function
Хранимым процедурам иногда приписывают предотвращение внедрения SQL. Тем не менее, в большинстве случаев вам все равно придется вызывать их с помощью параметров запроса, иначе они не помогут. Если вы используете хранимые процедуры исключительно , вы можете отключить разрешения для SELECT, UPDATE, ALTER, CREATE, DELETE и т. Д. (Почти все, кроме EXEC) для учетной записи пользователя приложения и таким образом получить некоторую защиту.