Verkar inte som att jag kan köra två ;-separerade kommandon över huvudtaget. Är detta någon inställning i MySQL?
(Och nej, har ingen ond uppsåt med detta. Tvärt om - skall eliminera möjligheterna att någon ställer till problem)
1 svar · 397 visningar · startad av l-boy
sql = "SELECT username, password "
sql = sql & " FROM users "
sql = sql & " WHERE userId = '"& request.querystring("userId") &"';"
rs.open sql, db
if not rs.eof then
do while not rs.eof
response.write(rs("username") &";"& rs("password") & chr(13))
rs.movenext
loop
end if
Ovanstående kod är som synes helt oskyddad mot sql-injections. Om t.ex:
request.querystring("userId") = "1' or 1=1'"
så får jag ut en massa användare. Om jag däremot vill göra något annat dumt, tex drop table, så försökte jag med följande:
request.querystring("userId") = "1'; drop table documents; select * from users where username like '%"
Med ovanstående kod får jag ett felmeddelande: A trappable error (C0000005) occurred in an external object. The script cannot continue running.
Om jag istället kör sql-queryin som genereras ovanför och kör den i Php-myadmin så raderas tabellen documents korrekt. Min fråga - varför går detta ej att göra direkt i webbläsaren?
Verkar inte som att jag kan köra två ;-separerade kommandon över huvudtaget. Är detta någon inställning i MySQL?
(Och nej, har ingen ond uppsåt med detta. Tvärt om - skall eliminera möjligheterna att någon ställer till problem)