Słyszałem, że „wszyscy” używają sparametryzowanych zapytań SQL do ochrony przed atakami typu SQL injection bez konieczności sprawdzania każdego elementu wprowadzanego przez użytkownika.
Jak Ty to robisz? Czy otrzymujesz to automatycznie podczas korzystania z procedur składowanych?
W moim rozumieniu to nie jest sparametryzowane:
cmdText = String.Format("SELECT foo FROM bar WHERE baz = '{0}'", fuz)
Czy byłoby to sparametryzowane?
cmdText = String.Format("EXEC foo_from_baz '{0}'", fuz)
A może muszę zrobić coś bardziej rozbudowanego, aby uchronić się przed wstrzyknięciem SQL?
With command
.Parameters.Count = 1
.Parameters.Item(0).ParameterName = "@baz"
.Parameters.Item(0).Value = fuz
End With
Czy poza względami bezpieczeństwa istnieją inne zalety korzystania z zapytań parametrycznych?
Aktualizacja: ten wspaniały artykuł został powiązany w jednym z pytań dotyczących odniesienia przez Grotok. http://www.sommarskog.se/dynamic_sql.html