Przekazywałem zarówno moim kolegom, jak i tutaj w SO, zalety używania parametrów w zapytaniach SQL, zwłaszcza w aplikacjach .NET. Posunąłem się nawet do obietnicy, że dają im odporność na ataki typu SQL injection.
Ale zaczynam się zastanawiać, czy to naprawdę prawda. Czy istnieją znane ataki polegające na iniekcji SQL, które zakończą się sukcesem w przypadku sparametryzowanego zapytania? Czy możesz na przykład wysłać napis, który powoduje przepełnienie bufora na serwerze?
Istnieją oczywiście inne kwestie, które należy wziąć pod uwagę, aby upewnić się, że aplikacja internetowa jest bezpieczna (np. Oczyszczanie danych wejściowych użytkownika i tym podobne), ale teraz myślę o wstrzyknięciach SQL. Szczególnie interesują mnie ataki na MsSQL 2005 i 2008, ponieważ są to moje podstawowe bazy danych, ale wszystkie bazy danych są interesujące.
Edycja: Aby wyjaśnić, co mam na myśli przez parametry i sparametryzowane zapytania. Używając parametrów, mam na myśli używanie „zmiennych” zamiast budowania zapytania sql w ciągu.
Więc zamiast tego robić:
SELECT * FROM Table WHERE Name = 'a name'
My to robimy:
SELECT * FROM Table WHERE Name = @Name
a następnie ustaw wartość parametru @Name w obiekcie zapytania / polecenia.