/ 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
SessionID
Fra : Allan Kjær


Dato : 11-04-08 14:22

Hej!

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"

På forhånd tak og go' weekend!

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

 
 
Brian Wolter (12-04-2008)
Kommentar
Fra : Brian Wolter


Dato : 12-04-08 18:57


"Allan Kjær" <allan_kjaer@hotmail.com> skrev i en meddelelse
news:47ff65e8$0$90274$14726298@news.sunsite.dk...
> Hej!
>
> 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"
>
> På forhånd tak og go' weekend!
>
> --
> 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


Hvordan ser din sql query ud ?
Laver du en post eller get af din form ?


Jeg ville prøve at fejlfinde med at udskrive alt til skærmen.

Response.Write Request.Form("brugernavn")
Response.Write "<br>"
Response.Write rs("customerno")
Response.Write "<br>"
Response.Write Request.Form("password")
Response.Write "<br>"
Response.Write rs("access")
Response.Write "<br>"

Så vil du kunne se om alle dine parametre bliver udlæst rigtigt.

Skriv gerne igen.

Med venlig hilsen
Brian Wolter
www.zolex.dk



Jørn Andersen (13-04-2008)
Kommentar
Fra : Jørn Andersen


Dato : 13-04-08 09:38

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

Stig Johansen (13-04-2008)
Kommentar
Fra : Stig Johansen


Dato : 13-04-08 19:01

Jørn Andersen wrote:

> strBrugernavn = Request.Form("brugernavn")
> strPw = Request.Form("password")
...
> " WHERE customerno = '" & strBrugernavn & "'" & _
> " AND password = '" & strPw & "'" & _

Host, host - hark, hark - hmm.

> - du skal validere input fra din Form, så du sikrer den mod
> SQL-injektion [2]

Sorry, kunne ikke lige dy mig ;)

--
Med venlig hilsen
Stig Johansen

Allan Kjær (14-04-2008)
Kommentar
Fra : Allan Kjær


Dato : 14-04-08 10:50

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

Allan Kjær (14-04-2008)
Kommentar
Fra : Allan Kjær


Dato : 14-04-08 12:20

Alright! Jeg fandt løsningen:

Min data i databasen var en "tal" og dataene fra min HTML-form
var tekst. Da jeg rettede typen i databasen til "tekst" fungerede
det hele. Tak for alle svar.

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

Søg
Reklame
Statistik
Spørgsmål : 177458
Tips : 31962
Nyheder : 719565
Indlæg : 6408162
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste