Du använder replace för att byta en apostrof mot två, för att escapea.
sql = "select username from users where username = '" & replace(request("username"), "'", "''") & "' and password = '" & replace(request("password"), "'", "''") & "'"
Mvh,
9 svar · 358 visningar · startad av Jaar
Det vanligast felet man gör är ju att man skapar sin sqlsats på detta vis:
sql = "select username from users where username = '" & request("username") & "' and password = '" & request("password") & "'"
genom att skriva in password = test' OR 'test' = 'test
så kommer slutet att bli så här
... and password = 'test' OR 'test' = 'test'
vilket alltid kommer valideras som sant, eller?
Iaf, ni känner nog de flesta till detta problem. I JSP/Java så har man preparedStatement som tar bort sådana problem, hur gör man i ASP?
Jag har inte testat det själv men jag har ju sett på många ställen att de varnar för liknande saker... Hur löser man det?
Du använder replace för att byta en apostrof mot två, för att escapea.
sql = "select username from users where username = '" & replace(request("username"), "'", "''") & "' and password = '" & replace(request("password"), "'", "''") & "'"
Mvh,
SQL-injections (som den 'buggen' kallas) fungerar inte om man använder Stored Procedures i SQL-server, det kan vara värt att veta. Det är väl MS motsvarighet till JSP:S/Java:s preparedStatement (kan inte Java så bra).
Stored Procedures är för att få en rad sql-satser att snabbt exekverara på servern (inte belasta klienten)... Inte för att ta bort såna här små fulhack (även om den kanske gör det också)
Store Procedures finns även i andra databaser, t.ex oracle...
Jaar skrev:
Stored Procedures är för att få en rad sql-satser att snabbt exekverara på servern
Jo, jag är ganska medveten om detta.
Men jag sa inte att de enbart användes till det. Dessutom påverkar väl knappast en vanligt SQL-statement klienten, snarare servern. Stored Procedures är förbestämda och 'kompilerade' vilket innebär prestandavinst på servern, vid avancerade statements.
OveRRidE, icke förglömma att webbservern är klient. Genom att använda stored procedures kan man alltså spara kräm på klienten, alltså webbservern, då man låter databasservern göra det den är bra på.
Mvh,
@nders, givetvis. Men jag tänkte på 'klient-klienten', som jag trodde Jaar antydde.
Att generalisera detta begrepp med en klient-server (www-server) anser jag smidigare, än att krångla till det för mycket, även om det är värt att nämna ibland. Som nu. t.ex.
RED. Nu skrev jag väl ändå fel, va?
I databassammanhang ser jag www servern som klient mot databasen och användaren mot wwwservern (så som det är).
Att påstå att webanvändaren är klient till databasen och att webanvändarens dators skulle slöas ner av ett sql statement skulle ju vara befängt
Om du har tunga sql-frågor och speciellt om du kör många nästlade som ger ett svar (?) så är en storeprocedure bra mycke snabbare...
Att påstå att webanvändaren är klient till databasen och att webanvändarens dators skulle slöas ner av ett sql statement skulle ju vara befängt
Ja.
Och därav missuppfattningen av mig.
Det går att använda prepared statements i ASP mha command-object.