Avatar billede lakridsdk Nybegynder
02. april 2006 - 23:46 Der er 7 kommentarer og
1 løsning

SQL injection

Når man fx i asp laver følgende:

"select * from users where name = '" & request.form("name") & "'"

kan folk skriver "' or 1=1'" osv for at opnå adgang til andre brugere. Dette kan dog afhjælpes med noget replace af '..

Mit spørgsmål er så: Hvilke andre ting skal man sortere fra? Jeg har oplevet at hvis man skriver \ i slutningen af fx en form går det også i kludder. Hvad kan man gøre for at sikre sig mod SQL injection?
Avatar billede bufferzone Praktikant
02. april 2006 - 23:58 #1
Helt generelt skal du sorterer så meget fra som muligt, eller rettere tillade så lidt som muligt. Det kunne f.eks. være

Tillade brug af bogstaver (hermed sortereralle tal fra hvis du kan)
Tillade brug at stort begyndelsesbogstav (hermed sorterer store bogstaver fra alle andre steder.
Tillade maximum 14 tegn og minimum 6 (Hermed sorterer alt mindere end 6 og større end 14 tegn fra)

Med ovenstående regler har du sikret at navnet kun indeholder bogstaver, kun har stort begyndelses bogstav, at der ikke kan bruges tal og specialtegn, heller ikke kode tegn, at der ikke kan bruges mellemrum at det ligger i intervallet 6 til 14 tegn.

Du kan overveje også at sortere æ,ø og å fra, det vil jeg anbefale
Avatar billede kalp Novice
03. april 2006 - 00:01 #2
benyt dig af denne scanner
http://www.acunetix.com/vulnerability-scanner/

så finder den alle de sårbarheder der er i dit script.
Avatar billede arne_v Ekspert
03. april 2006 - 00:05 #3
brug parameters så sørger provideren selc for at håndtere alle tegn med
speciel betydning
Avatar billede lakridsdk Nybegynder
03. april 2006 - 13:05 #4
arne_v hvad mener du med parameters ?

bufferzone; det er desværre ikke kun med brugernavne det er problemet, men også med passwords og generelt andre ting i databaser
Avatar billede arne_v Ekspert
03. april 2006 - 13:14 #5
parameters er hm parameters

jeg kan give et eksempel i ASP:

<%
' open
adParamInput = 1
adInteger = 3
adVarChar = 200
Set con = Server.CreateObject("ADODB.Connection")
con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Databases\MSAccess\Test.mdb;;"
Set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = con
' traditionel
con.Execute "INSERT INTO t1 VALUES(7,'O''Toole')"
' med parameters
cmd.CommandText = "INSERT INTO t1 VALUES(@f1,@f2)"
cmd.Parameters.Append(cmd.CreateParameter("@f1", adInteger, adParamInput))
cmd.Parameters.Append(cmd.CreateParameter("@f2", adVarChar, adParamInput, 50))
cmd.Parameters("@f1") = 8
cmd.Parameters("@f2") = "O'Malley"
cmd.Execute
' close
Set cmd = Nothing
Set con = Nothing
%>
OK
Avatar billede lakridsdk Nybegynder
04. april 2006 - 21:25 #6
Arne lav en post som svar, du fortjener pointene. Tak
Avatar billede arne_v Ekspert
04. april 2006 - 22:42 #7
svar
Avatar billede lakridsdk Nybegynder
20. april 2006 - 07:51 #8
Tak for svaret, undskyld forsinkelsen arne_v
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester