Her er ASP-koden:
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("userdb.mdb")
Conn.Open DSN
strSQL = "Select * From users Order By ID"
set rs = Conn.Execute(strSQL)
Session("login") = "WRONG"
Do While Not rs.EOF
If Request.Form("brugernavn") = rs("customerno") AND
Request.Form("password") = rs("password") AND rs("access") = "1" Then
Session("login") = "1"
Session.Timeout = 30
ElseIf Request.Form("brugernavn") = rs("customerno") AND
Request.Form("password") = rs("password") AND rs("access") = "2" Then
Session("login") = "2"
Session.Timeout = 30
ElseIf Request.Form("brugernavn") = rs("customerno") AND
Request.Form("password") = rs("password") AND rs("access") = "3" Then
Session("login") = "3"
Session.Timeout = 30
ElseIf Request.Form("brugernavn") = rs("customerno") AND
Request.Form("password") = rs("password") AND rs("access") = "4" Then
Session("login") = "4"
Session.Timeout = 30
ElseIf Request.Form("brugernavn") = rs("customerno") AND
Request.Form("password") = rs("password") AND rs("access") = "5" Then
Session("login") = "5"
Session.Timeout = 30
End if
'*** Tester output
Response.Write "DB customer no:" & rs("customerno") & "<br />"
Response.Write "DB password:" & rs("password") & "<br />"
Response.Write "DB access:" & rs("access") & "<br />"
Response.Write "Session ID:" & Session("login") & "<br />"
Response.Write "Form brugernavn:" & Request.Form("brugernavn") & "<br />"
Response.Write "Form password:" & Request.Form("password") & "<br /><br />"
'***
rs.MoveNext
Loop
Conn.Close
Set Conn = Nothing
***
Som man kan se ovenover, tester jeg at alle outputs er rigtige. Alt ser
helt fint ud - dog bliver mit SessionID konstant sat til WRONG. Af en eller
anden årsag, kan dataene fra min HTML-form og dataene i min database ikke
sammenlignes. Mangler jeg nogle "" eller ''?..
Jørn Andersen wrote in dk.edb.internet.webdesign.serverside.asp:
> On 11 Apr 2008 13:21:44 GMT, Allan Kjær <allan_kjaer@hotmail.com> wrote:
>
> >Hvordan tjekker jeg data fra en form er lig med data fra en
> >database?
> >
> >F.eks. hvis jeg vil sætte session ID efter om brugernavn og
> >password indtastet i en html-form er lig med data i en
> >MDB-database?
> >
> >Dette virker nemlig ikke for mig:
> >
> >If Request.Form("brugernavn") = rs("customerno") AND
> >Request.Form("password") = rs("password") AND rs("access") = "1"
> >Then
> >Session("login") = "1"
>
> *Hvordan* virker det ikke?
> - får du en fejl-medddelelse? Eller giver den bare ikke det ønskede
> resultat?
> Hvis det er det sidste, så test hver af betingelserne enkeltvis (navn,
> pw, access) for at se, hvor det går galt.
>
> Men jeg tror du skal tænke omvendt: I stedet for at hente data ud fra
> databasen og så teste dem i ASP, så lav betingelen for en forespørgsel
> og spørg databasen om de findes. Noget i retning af:
>
> strBrugernavn = Request.Form("brugernavn")
> strPw = Request.Form("password")
> strSql = "SELECT customerno, access" & _
> " FROM [tabel-navn]" & _
> " WHERE customerno = '" & strBrugernavn & "'" & _
> " AND password = '" & strPw & "'" & _
> " AND access = '1'"
>
> Hvis der så kommer et resultat ud, er den OK ellers ikke.
>
> Der er dog et par ting, du skal tage højde for:
> - du må ikke gemme passwords i klar tekst i din database [1]
> - du skal validere input fra din Form, så du sikrer den mod
> SQL-injektion [2]
> - (optional) i stedet for at have access-feltet som et tekst-felt (som
> det ser ud til, at du har, vil jeg opfordre dig til at bruge et
> tal-felt. Det giver dig mulighed for at have flere "adgangs-niveauer".
>
> [1] Selv om din applikation sikkert ikke er til Nationalbankenm så
> bruger folk ofte samme password til flere ting, og du risikerer at få en
> viden, som du helst vil være fri for at have.
> Hvis fx nogen misbruger en brugers password til noget helt andet, så kan
> du være under mistanke.
> Det er et must ikke at gemme passwords i klar tekst.
>
> Og det er ret nemt at undgå: Gem den hashede ("krypterede") værdi af
> passwordet og sammenlign med den hashede værdi af det indtastede, når
> der skal logges ind.
> Se fx:
> <url:
http://www.asp-faq.dk/article/?id=52>
>
> [2]
> Se fx: <url:
http://www.asp-faq.dk/article/?id=95>
>
> Se evt. også: <url:
http://www.asp-faq.dk/article/?id=49>
>
> Good luck!
>
> --
> Jørn Andersen,
> Brønshøj
--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! =>
http://www.html.dk/tutorials