Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Czy ten kod zapobiega wstrzykiwaniu SQL?

W odpowiedzi na Twoje bezpośrednie pytanie:Czy ten kod zapobiega wstrzykiwaniu SQL:Nie

Oto dowód — przeprowadź ten ciąg przez metodę PrepareString:

Dim input = "'" & Chr(8) & "; Drop Table TableName; - " & Chr(8) & "-"
Dim output = PrepareString(input)

Console.WriteLine(input)
Console.WriteLine(output)

Zmodyfikowałem opublikowaną przez Ciebie metodę GetRecord, aby zwracała w pełni przygotowany ciąg SQL zamiast pobierać rekord z bazy danych:

Console.WriteLine(GetRecord(output))

A to jest wynik

Input  = ; Drop Table TableName; --
Output = '; Drop Table TableName; --
Query  = SELECT * FROM TableName WHERE Key = ''; Drop Table TableName; --'

Dodaj 1 dodatkową linię kodu:

My.Computer.Clipboard.SetText(input)

Masz ciąg znaków, który musisz skopiować bezpośrednio do schowka, aby wkleić go do pola wejściowego na stronie internetowej, aby zakończyć wstrzykiwanie SQL:

'; Drop Table TableName; - -

[Zauważ, że znaki kontrolne zostały pominięte w wynikach postu przez StackOverflow, więc będziesz musiał postępować zgodnie z przykładem kodu, aby utworzyć wyjście]

Po uruchomieniu metody PrepareString będzie ona miała dokładnie takie same dane wyjściowe — kod Chr(8) ASCII to backspace, który usunie dodatkowe „'”, które dołączasz do mojego, co spowoduje zamknięcie ciągu, a następnie swobodnie dodawać na końcu co chcę. Twój PrepareString nie widzi mojego -- ponieważ faktycznie używam -- ze znakiem cofania, aby usunąć spację.

Wynikowy kod SQL, który budujesz, wykona następnie moją instrukcję Drop Table bez przeszkód i natychmiast zignoruje resztę zapytania.

Zabawną rzeczą w tym jest to, że możesz użyć niedrukowalnych znaków, aby w zasadzie ominąć każdą kontrolę znaków, którą możesz wymyślić. Najbezpieczniej jest więc używać sparametryzowanych zapytań (nie o to prosiłeś, ale jest to najlepsza droga, aby tego uniknąć).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Osiągnięcie limitu parametrów 2100 (SQL Server) podczas korzystania z Contains()

  2. Rozmyte dopasowanie przy użyciu T-SQL

  3. Dlaczego narzędzia do monitorowania baz danych w chmurze dla SQL Server są cenne

  4. Metoda SqlDataAdapter.Fill wolno

  5. izolowanie podciągu w ciągu przed symbolem w SQL Server 2008