Avatar billede jps6kb Novice
26. august 2005 - 02:57 Der er 3 kommentarer og
1 løsning

Hjælp til sikkerhed..

Hej,

I lange tider har jeg brugt dette til at sørge for brugere kunne adskilles, men så MSN'ede jeg med en af mine kollegaer.. og så!

Noget med at jeg er blevet rådet til at bruge en


Function AddSlashes(sString)
  AddSlashes = Replace(Replace(sString, "\", "\\"), """", "\""")
End Function

på det.. hvad er jeres råd?



<%
Function unQuote(strTekst)
  strTekst = Trim(strTekst)
  unQuote = Replace(strTekst,"%","53")
End Function

if(len(request.querystring("r"))>0) then
    session("r")=request.querystring("r")
end if

If Request("mode") = "Check" then
  SET conn = Server.CreateObject("ADODB.Connection")
  conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("data.mdb")
  ' Gemmer formfelterne i Variabler
  strUsername = unQuote(request("username"))
  strPassword = unQuote(request("password"))

  sql = "SELECT * FROM User where (username = '" & strUsername & "') and (password ='" & strPassword & "')"
  Set rs = conn.Execute(Sql)
 
  if rs.eof then
    Session("thisUser") = ""
    fejl = "<font color=""red""><i>Forkert brugernavn eller adgangskode!</i></font>"

  else
    fejl = ""
    Session("thisUser") = rs("username")
    Session.LCID = 1030
    Conn.Close

   
  if(len(session("r"))=0) then
      'Default
     
    else
      r = session("r")
      session("r")=""
      response.Redirect(r)
    end if
  end if
end if
%>
Avatar billede ksoren Nybegynder
26. august 2005 - 03:18 #1
Dit problem er sql injection. Antag jeg indtaster som password: 'or'1
så bliver din sætning:

SELECT * FROM User where (username = 'xx') and (password =''or'1')

'1' vil altid evaluere til true. Så den vil blankt ignorere passwordet, og logge på ind som xx

Access benytter ikke backslash men 2 x apostroffer til at escape med..

Function AddSlashes(sString)
    SafeSQL = Replace(sString, "'", "''")
End Function

strUsername = SafeSQL(strUsername)
strPassword = safeSQL(strPassword)

med denne funktion bliver sætnignen så

SELECT * FROM User where (username = 'xx') and (password ='''or''1')

og Access vil ikke bryde ud af strengen ved mine apostroffer, og sql injection er derfor ikke længere muligt
Avatar billede ksoren Nybegynder
26. august 2005 - 03:19 #2
Det gik lidt hurtigt med at skrive det nye funktionsnavn :)
Avatar billede jps6kb Novice
27. august 2005 - 20:34 #3
Det var bare herligt.. jeg siger mange tak. Smider du et svar? .o)
Avatar billede ksoren Nybegynder
01. september 2005 - 15:41 #4
ok
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
Kurser inden for grundlæggende programmering

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