Avatar billede Slettet bruger
08. maj 2003 - 11:14 Der er 8 kommentarer og
1 løsning

Access DB: Forbudte tegn i login-system

Jeg har lavet et login-system som fungerer perfekt, men der er stadig nogle ting jeg vil ha lavet om. F.eks., så er der nogle tegn som ikke må forekomme, når man opretter sig som bruger. Jeg har gjort at HTML bliver decoded når det bliver fundet, men det er ligesom ikke nok. Brugernavnet og password'et må kun indeholde følgende:

Bogstaver:
a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, x, y, z, æ, ø, å

Tal:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9

Yderligere tegn:
- og _

Forskellen på store og små bogstaver er ikke relevant. Dvs. bogstaverne foroven må både være store og små.

Her er koden:
*********************************

<%
'form-kontrol udføres
    if request.form("username") = "" then response.redirect("/error.asp?content=newuser&error=tomuser")
    if request.form("kodeord") = "" then response.redirect("/error.asp?content=newuser&error=tompass")
    if request.form("username") = " " then response.redirect("/error.asp?content=newuser&error=tomuser")
    if request.form("kodeord") = " " then response.redirect("/error.asp?content=newuser&error=tompass")
    if request.form("email") = "" then response.redirect("/error.asp?content=newuser&error=tommail")
    if request.form("email") = " " then response.redirect("/error.asp?content=newuser&error=tommail")

'connection til databasen oprettes
    Set Conn = Server.CreateObject("ADODB.Connection")
    Conn.Open ("Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("/database.mdb"))

'kontrol om allerede eksisterende info som brugernavn og email udføres
    Set rs = Server.CreateObject("ADODB.RecordSet")
    rs.Open "SELECT * FROM [users] ORDER BY [brugernavn] DESC", Conn, 1, 3
    Do until rs.EOF
        if request.form("username") = rs("brugernavn") then response.redirect("/error.asp?content=newuser&error=rsuser")
        if request.form("email") = rs("email") then response.redirect("/error.asp?content=newuser&error=rsmail")
    rs.MoveNext
    Loop

'form-kontrol udføres
    if request.form("kodeord") <> request.form("rekodeord") then response.redirect("/error.asp?content=newuser&error=equalpass")
    if request.form("email") <> request.form("reemail") then response.redirect("/error.asp?content=newuser&error=equalmail")

'tilføjelse af brugeren bekræftet, og tilføjes her
    Set rs = Server.CreateObject("ADODB.RecordSet")
    rs.Open "SELECT * FROM [users]", Conn, 1, 3
    rs.AddNew
        rs("registered") = Now()
        rs("IP") = Request.ServerVariables("REMOTE_ADDR")
        rs("brugernavn") = Server.HTMLEncode(LCase(request.form("username")))
        rs("password") = Server.HTMLEncode(LCase(request.form("username")))
        rs("email") = LCase(request.form("email"))
        rs("postnummer") = request.form("postnummer")
        rs("nyhedsbrev") = request.form("nyhedsbrev")
    rs.Update
    response.redirect("/default.asp?content=newuser")
%>
Avatar billede eagleeye Praktikant
08. maj 2003 - 11:49 #1
Du kan lave en function som tjekker for gyldige karakter
Eks på en function som tjekke for loglige tegn i en streng:


'function som tjekker efter lovlige karakter
function validStr(strInput)
  validChar = "abcdefghijlkmnopqrst01234567890 "

  for i = 1 to len(strInput)
    if inStr(1, validChar, Mid(strInput,i,1)) = 0 then
      validStr = false
      exit function
    end if
  next
  validStr = true
end function


str = "mitnyebrugernavn"
if validStr(str) then
  Response.write "Dit nye brugernavn er ok."
else
  Response.write "Du har angivet ulovlige tegn"
end if
Avatar billede eagleeye Praktikant
08. maj 2003 - 11:51 #2
Du kan rette i denne streng

validChar = "abcdefghijlkmnopqrst01234567890 "

og tilføje gyldige karakter, hvis du vil havde æ, ø, å, -, _ med så sådan her:

validChar = "-_abcdefghijlkmnopqrstæøå01234567890"
Avatar billede thomas_regin Nybegynder
08. maj 2003 - 12:02 #3
Ja, eller endnu nemmere!.. Brug Regular Expressions!

Denne funktion returner true/false:

Function verifyName(myString)

Set rex = New RegExp

rex.Pattern = "[a-z0-9]"
rex.IgnoreCase = True
rex.Global = True

set matches = rex.Execute(myString)

for each match in matches
    myMatchString = myMatchString + match
Next

if len(myMatchString) = len(myString) then
    verifyName = true
Else
    verifyName = false
End If

Set RegularExpressionObject = nothing

End Function

Prøv f.eks

Response.Write verifyName("Hejsa")

og derefter

Response.Write verifyName("*/(Hejsa")

Mvh,

/thomas regin.
Avatar billede Slettet bruger
08. maj 2003 - 12:37 #4
tak for hjælpen, eagleeye.. 200 points lige i face :)
Avatar billede Slettet bruger
08. maj 2003 - 12:39 #5
men hvad med mellemrum? er det noget jeg kan tilføje i:
"abcdefghijklmnopqrstuvxyzæøå01234567890 "
?
for det mellemrum der er til sidst, fungerer ikke...
Avatar billede eagleeye Praktikant
08. maj 2003 - 12:49 #6
Det skulle være muligt med mellemrum, men hvis man har et brugernavn med mellemrum så giver det kun mening hvis der mellem to ord.

Her er to brugernavne hvor det føste er der mellemrum til sidst.
navn
navn
Avatar billede thomas_regin Nybegynder
08. maj 2003 - 13:02 #7
Selvom du afviste mit svar, så synes jeg du skal prøve at læse lidt om Regular Expressions, da det er noget af det mest kraftfulde inden for string-validering nogensinde, og giver dig mulighed for at designe skabeloner for hvordan dine brugernavne skal se ud etc. etc...

Mvh,

/thomas regin.
Avatar billede Slettet bruger
08. maj 2003 - 13:16 #8
hmm, jeg accepterer de scripts der er lettest at bruge for mig.. jeg startede med at forsøge med dit, fordi det så mere avanceret ud, men da jeg løb ind i første problem, så ville jeg også lige prøve det andet.. da det andet fungerede med det samme, så behøvede jeg ikke at gøre mere ud af dette.
http://www.balladefis.dk/ siden er enkel, og man får adgang til vores downloads, etc. hvis man logger ind. Så siden sikkerheden ikke har brug for at blive sat længere op, så ser det ikke som en nødvendighed at knokle med kraftfulde scripts endnu :)

men mange tak for din hjælp. Har gemt dit script så jeg kan tage det op den dag det bliver nødvendigt :)
Avatar billede thomas_regin Nybegynder
08. maj 2003 - 13:27 #9
Hehe.. Okay!..

For at få samme effekt ud af det, som Eagle's skal du blot benytte:

str = "mitnyebrugernavn"
if verifyName(str) then
  Response.write "Dit nye brugernavn er ok."
else
  Response.write "Du har angivet ulovlige tegn"
end if

Men Eagles fungerer også helt perfekt, og du skal naturligvis også godtage det, som virker for dig! Det var bare et godt råd, at prøve dig frem med RegEx, hvis du på et senere tidspunkt skal validere strings igen! :)

Mvh,

/thomas regin.
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