29.června 2008

PC a internet SQL injection v ASP - řešení

Potřebuji vyřešit problém s SQL injection na jedné webové aplikaci. Přišlo mi to jako samozřejmá věc a ejhle, něco mi prostě uniká. Mám následující kód:


dim conn1
set conn1=myConnectionOpen("myDatabase")

dim cmd
set cmd=Server.CreateObject("ADODB.Command")
cmd.ActiveConnection=conn1

cmd.commandtype=1
cmd.commandtext="SELECT TOP 1000 * FROM clanky WHERE (Autor LIKE ('%' + @autor + '%'))"

cmd.parameters.append cmd.createparameter("@autor",129,1,70,"Hla")

set rs=cmd.execute

rs.close
set rs=nothing

set cmd=nothing
conn.close
set conn=nothing

Při spuštění mi to hlásí na červeném řádku Must declare the variable '@autor'.

Domníval jsem se, že to dělám o řádek víš, ale něco mi asi uniká. Poradíte někdo prosím?


Aktualizace - řešení

Tak po mnoha dnech hledání a konzultování jsme dospěli k názoru, že výše zmíněný příklad bude fungovat (asi) pouze pro uložené procedury. Pro akční SQL dotazy je potom funkční řešení následovné:


dim conn1
set conn1=myConnectionOpen("myDatabase")

dim cmd
set cmd=Server.CreateObject("ADODB.Command")
cmd.ActiveConnection=conn1

cmd.commandtype=1
cmd.commandtext="SELECT TOP 1000 * FROM clanky WHERE (Autor LIKE ('%' + ? + '%'))"

set rs=cmd.execute(, array("Hla"))

rs.close
set rs=nothing

set cmd=nothing
conn.close
set conn=nothing

Zajímavé je, že v ADO.NET první zmíněný příklad (mírně upravený do .NET) funkuje i pro akční dotazy.


Hledáte-li správce sítě nebo prostě nekoho kdo umí spravovat servery, hledejte na www.petr-hladis.cz

Přečteno: 2132x | Komentářů: 0x | Kategorie: PC a internet

Komentáře čtenářů

Přidat vlastní komentář k článku



Z důvovů ochrany proti spamu prosím do následujícího políčka napište texy "NOSPAM":

Chcete-li ke komentáři přidat svou fotku nebo jinou ikonku, postupujte podle návodu.


TOPlist

[CNW:Counter]