webForumDet fria alternativet

Skydd mot "sql-hack"

9 svar · 358 visningar · startad av Jaar

JaarMedlem sedan juli 2001434 inlägg
#1

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?

@ndersMedlem sedan juni 200032 969 inlägg
#2

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,

OveRRidEMedlem sedan feb. 200112 078 inlägg
#3

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).

JaarMedlem sedan juli 2001434 inlägg
#4

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...

OveRRidEMedlem sedan feb. 200112 078 inlägg
#5

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.

@ndersMedlem sedan juni 200032 969 inlägg
#6

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,

OveRRidEMedlem sedan feb. 200112 078 inlägg
#7

@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? :l

JaarMedlem sedan juli 2001434 inlägg
#8

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...

OveRRidEMedlem sedan feb. 200112 078 inlägg
#9

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.

LarsGMedlem sedan dec. 200012 464 inlägg
#10

Det går att använda prepared statements i ASP mha command-object.

133 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)