/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Bets practice ift. at forhindre SQL inject~
Fra : Christian R. Larsen


Dato : 11-04-06 13:08

Jeg har et site, hvor jeg gerne vil reducere risikoen for SQL injects og
site cross scripting.

Sitet er udviklet i VBscript, og der ligger en MySQL-database under.

Mit site har en forside.asp, som viser artikler fra databasen.

forside.asp kan kaldes med argumentet 'artikel', dvs.:
www.mitsite.dk/forside.asp?artikel=199

Nu er spørgsmålet:

Hvordan sikrer man sig bedst mod SQL injects og cross scripting?

Jeg forestiller mig noget i retning af følgende, som jeg vil høre, hvad I
mener om.


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<%
Dim iArtikel
iArtikel = Request("Artikel")
iArtikel = MetaCharFilter(iArtikel)

%>
<HTML>
<BODY>
....(en hel masse)...
</BODY>
</HTML>

<%
Function MetaCharFilter (byval intext)

(funktion der fjerner metacharacters fra 'intext')

End Function
%>









 
 
Jens Gyldenkærne Cla~ (11-04-2006)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 11-04-06 13:20

Christian R. Larsen skrev:

> Jeg har et site, hvor jeg gerne vil reducere risikoen for SQL
> injects og site cross scripting.

God ide.


> forside.asp kan kaldes med argumentet 'artikel', dvs.:
> www.mitsite.dk/forside.asp?artikel=199

Jeg går ud fra at 199 svarer til et id-felt i din database.

I så fald er problemet ikke så stort. Du skal bare tjekke at det
argument du modtager er et gyldigt tal.


> Dim iArtikel
> iArtikel = Request("Artikel")

If isNumeric(iArtikel) Then
   ' Alt o.k.
Else
   ' Vis en standardside, eller en fejlmeddelelse
End If


Det er lidt mere besværligt hvis du skal have overført en
tekstværdi. Her skal man sørge for at escape anførselstegn så der
ikke opstår "rod" i sql-sætningen. I Access og MSSQL gøres det ved
at dublere indlejrede anførselstegnene - erstat ' (enkelt
apostrof) med '' (to gange apostrof), så opfattes det af databasen
som det ønskede ene apostroftegn. Jeg ved ikke om det virker på
samme måde i MySQL, men jeg kunne godt forestille mig at man
escaper med \ i stedet for et ekstra '-tegn - altså 'Mc\'Donald' i
stedet for 'Mc''Donald'. Prøv det evt. direkte i MySQL.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste