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?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.
Chcete-li ke komentáři přidat svou fotku nebo jinou ikonku, postupujte podle návodu.