On 07 May 2007 17:40:37 GMT, j p <donner_63@hotmail.com> wrote:
>Kan nogen lave denne program kode nemmere ? Tak
Ja - og det kan også laves mere sikkert.
><%
>
>strsql = "Select kodeord From tabel Where lcase(brugernavn) = '"
>& lcase(session("loginbrugernavn"))& "'"
>Set rs = Conn.Execute(strSQL)
>
>if lcase(rs.fields("kodeord")) = lcase(session("loginkodeord"))
>then
Hvorfor lader du ikke bare SQL'en gøre arbejdet:
strsql = "SELECT kodeord FROM tabel" & _
" WHERE brugernavn = '" & loginbrugernavn & "'" & _
" AND kodeord = '" & loginkodeord & "'"
Set rs = Conn.Execute(strSQL)
If Not rs.eof Then
osv.
- hvor der forinden er sat:
loginbrugernavn = LCase(Session("loginbrugernavn"))
loginkodeord = LCase(Session("loginkodeord"))
Husk at afslutte rs og Conn *uden for* If'en!
Det bør ikke være nødvendigt at bruge LCase i forbindelse med *udtræk*
fra databasen - det bør sættes, inden de gemmes i databasen, hvis man
ikke ønsker, at de skal være versalfølsomme. Ditto for Session-variable.
Men så er der sikkerheden.
Den ene ting er selvfølgelig, at login'en skal være sikret mod
SQL-injektion. Det har du formentlig allerede gjort før den citerede
kode - ellers kig:
<url:
http://www.asp-faq.dk/article/?id=95>
Den anden ting er, at du *ikke må* gemme dine passwords i klar tekst -
også selv om det ikke er kronjuvelerne, du skal sikre.
Grunden er, at folk typisk bruger samme passwords til "banale" ting og
til deres mail, webbank etc.
Det betyder, at hvis nogen har misbrugt adgangen til fx en af dine
brugeres webbank, så er du blandt de mistænkte - medmindre du kan vise,
at du slet ikke har adgang til password'et.
Dette gøres nemmest med en hash-funktion - fx MD5 eller SHA1.
I stedet for at gemme strPassword, så gemmer du MD5(strPassword) eller
SHA1(strPassword). Og du sammenligner værdien i databasen med den
hashede værdi af det indtastede fra formularen.
Se:
<url:
http://www.asp-faq.dk/article/?id=52>
- hvor der også er links til hash-funktioner, som nemt kan gemmes i en
include-fil.
Good luck!
--
Jørn Andersen,
Brønshøj