Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Този код предотвратява ли инжектирането на SQL?

В отговор на директния ви въпрос:Този код предотвратява ли инжектирането на SQL:Не

Ето доказателството - прокарайте този низ през метода PrepareString:

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

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

Промених метода GetRecord, който публикувахте, за да върна напълно подготвения SQL низ, вместо да получа записа от базата данни:

Console.WriteLine(GetRecord(output))

И това е изходът

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

Добавете 1 допълнителен ред код:

My.Computer.Clipboard.SetText(input)

И имате низа, от който се нуждаете, копиран направо в клипборда, за да го поставите в полето си за въвеждане на уебсайта, за да завършите SQL инжекцията:

'; Drop Table TableName; - -

[Отбелязвайки, че контролните знаци са били пропуснати от изхода на публикацията от StackOverflow, така че ще трябва да следвате примера с код, за да създадете своя изход]

След като методът PrepareString бъде стартиран, той ще има точно същия изход - Chr(8) ASCII кодът е backspace, който ще премахне допълнителното "'", което добавяте към моя, което ще затвори вашия низ и след това аз съм свободен да добавя каквото си поискам в края. Вашият PrepareString не вижда моя - защото всъщност използвам - - със знак за връщане, за да премахнете интервала.

Полученият SQL код, който изграждате, след това ще изпълни моя оператор Drop Table безпрепятствено и незабавно ще игнорира останалата част от вашата заявка.

Забавното в това е, че можете да използвате непечатаеми знаци, за да заобиколите всяка проверка на знаци, която можете да измислите. Така че е най-безопасно да използвате параметризирани заявки (което не е това, което поискахте, но е най-добрият начин да избегнете това).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да вмъкна 10 милиона записа за възможно най-кратко време?

  2. Риск от сблъсък на UUID, използвайки различни алгоритми

  3. sql география към dbgeography?

  4. Фатална грешка:Извикване на недефинирана функция sqlsrv_connect()

  5. Как да генерирате тестови данни в SQL Server