sql >> Databáze >  >> RDS >> Sqlserver

Zabraňuje tento kód vkládání SQL?

Odpověď na vaši přímou otázku:Zabraňuje tento kód vkládání SQL:Ne

Zde je důkaz – protlačte tento řetězec metodou PrepareString:

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

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

Upravil jsem metodu GetRecord, kterou jste zveřejnili, tak, aby vrátila plně připravený řetězec SQL namísto získání záznamu z databáze:

Console.WriteLine(GetRecord(output))

A toto je výstup

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

Přidejte 1 řádek kódu navíc:

My.Computer.Clipboard.SetText(input)

A máte řetězec, který potřebujete zkopírovat přímo do schránky, abyste jej mohli vložit do vstupního pole na webu, abyste dokončili vkládání SQL:

'; Drop Table TableName; - -

[Upozorňujeme, že z výstupu příspěvku StackOverflow byly vynechány řídicí znaky, takže při vytváření výstupu budete muset postupovat podle příkladu kódu]

Po spuštění metody PrepareString bude mít přesně stejný výstup - Chr(8) ASCII kód ​​je backspace, který odstraní extra "'", které připojujete k mému, což zavře váš řetězec a pak jsem na konec si mohu přidat, co chci. Váš PrepareString nevidí můj -- protože ve skutečnosti používám -- se znakem backspace k odstranění mezery.

Výsledný kód SQL, který vytváříte, pak bez zábran provede můj příkaz Drop Table a bude okamžitě ignorovat zbytek vašeho dotazu.

Zábavné na tom je, že pomocí netisknutelných znaků můžete v podstatě obejít jakoukoli kontrolu znaků, kterou vymyslíte. Nejbezpečnější je tedy používat parametrizované dotazy (což není to, na co jste se ptali, ale je to nejlepší způsob, jak se tomu vyhnout).



  1. Chyba:Poskytovatel TCP:Kód chyby 0x2746. Během nastavení SQL v linuxu přes terminál

  2. Dynamicky generujte sloupce pro křížové tabulky v PostgreSQL

  3. Protokolování Oracle SQL Query

  4. Proč postgres nevytváří databázi?