Artiklar » ASP » Tvinga till säkrare lösenord.

 
 

Tvinga till säkrare lösenord.

Författare: mactommy
Datum: den 22 augusti 2007
Antal lästa: 4222
Ej stjärnmärkt

I dagens sammhälle så finns det många ställen som man ska ange en kod på och inte minst på internet. Oftast när man får välja ett lösenord så tar man ett som man redan har på flera ställen. Vi vet egentligen inte hur skyddade lösenorden är på internet om man skapar ett nytt konto på ett forum. Lagras lösenordet okrypterat i databasen så kan illasinnad administratören plocka fram lösenordet ur databasen och prova det på andra forum, eller så kanske det går att fiska upp hela databsen. När man skapar lösenord så tar man oftast lösenord som har någon anknytning till i ens privata liv eller varför inte ett vanligt ord. Dessa lösenord är oftast de lättaste att knäcka. Man kan även köra program som "brute force":ar lösenord och det innbär att man provar t.ex. aaaa för att sedan prova aaab, aaac o.s.v. till zzzz. Vi som skapar hemsidor kan enkelt försvåra brute force attacker genom att göra en koll på att man bara får göra tre inloggningsförsök, sen låser man kontot i en timme. Skulle man brute force:a lösenorden så kommer det ta några dagar innan man hittat rätt om man gör detta enkla skydd. Ni kanske tänker på att det inte finns något särskilt på eran sida att man behöver prova knäcka lösenord och ta sig in. Det kanske är någon användare som har samma inloggning och password på andra sidor, eller varför inte på sitt eget FTP-konto? Visst det är klantigt men vi kan hjälpa till och försvåra det hela en liten aning.

Men hur kan vi tvinga användaren att höja säkerheten på sina egna lösenord? Genom att begränsa lösenordet att det minst måste vara 6 tecken gör att det kommer ta mycket längre tid att gå igenom från aaaaa till zzzzz. Om vi även tvingar att de ska blanda bokstäver och siffror gör det ännu mer komplicerat att knäcka lösenordet. Vill man försvåra ytterligare så lägger man till ytterligare ett tecken som inte är en bokstav eller en siffra, ta ett lösenord som t.ex. "pass+04" så måste man gå igenom alla 255 tecken på alla 7 positioner för att komma på lösenordet.

Hur kan vi skapa en enkel funktion som går igenom lösenordet och räknar ut antalet siffror, bokstäver och övriga tecken? Det första  som vi gör är att kolla om längden på lösenordet är tillräckligt långt, här kan vi utnyttja kommandot LEN.
Kod:
If Len(strPassword) > 5 then

Vi har längden och nu kan vi skapa oss en FOR-sats som går igenom tecken för tecken.
Kod:
For intCounter = 1 to Len(strPassword)
    strBokstav = Mid(strPassword,intCounter,1)
Next

Men jag kommer inte att utnyttja denna variant, för att vara helt säker så kommer jag att plocka ut ASCII-talet för varje bokstav och även använda mig utav en SELECT CASE-sats. Det finns säkert något smartare sätt, men jag trivs med min lösning då den är överskådlig. Vi kör åter med FOR-satsen, eftersom vi inte kommer runt den i min lösning... Kod:
For intCounter = 1 to Len(strPassword)
    'Vi plockar ut bokstav för bokstav och gör om det till ett nummer
    Select Case asc(Mid(strPassword,intCounter,1))
        ' Vi tar alla siffror och använder ASCII-koden för siffrorna
        Case 48,49,50,51,52,53,54,55,56,57
            ' Vi räknar upp intSiffra + 1 för varje träff
            intSiffra = intSiffra + 1
        ' Vi tar alla bokstäver och använder ASCII-koden för bokstäverna    
        Case 65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,
        84,85,86,87,88,89,90,97,98,99,100,101,102,103,104,105,
        106,107,108,109,110,111,112,113,114,115,116,
        117,118,119,120,121,122,196,197,214,228,229,246
            ' Vi räknar upp intBokstav + 1 för varje träff
            intBokstav = intBokstav + 1
        ' Och så gör vi en uppsamling för resterande tecken
        Case Else
            ' Vi räknar upp intOvriga + 1
            intOvriga = intOvriga + 1
        End Select
Next

Som ni ser så kan ni enkelt splitta upp bokstäverna om ni vill att de ska räkna gemener och versaler separat.

När ni har kört lösenordet genom kollen så kör ni en enkel IF-sats som kollar om de olika intSiffra, intBokstav och intOvriga har uppnått mängden tecken som ni har satt upp som regel för erat säkra lösenord.

I texten ovan så visade jag hur man plockar ut tecken för tecken när man ska kolla upp ett lösenord. Om vi bara ska kolla bokstäverna A-Z och siffrorna 0-9 så kan vi även använda oss utav RegExp och testa ett angivet villkor. Jag kommer att visa en funktion där man kollar upp antalet siffror att det stämmer med det man skickar in med intChar och tipsa om rätt pattern för versaler och gemener. Kod:
Function checkDigit(strPassword,intChar)
    With New RegExp
        .Pattern = "[0-9]{" & intChar & "}"
        checkDigit = .Test(strPassword)
    End With
End Function

För enkelhetens skull så visar jag enbart hur man skriver ut om villkoret har uppfylts eller ej. Kod:
Response.Write checkDigit("kalle01",2)

Denna funktion kommer nu att skriva ut "true" eller "false" beroende om villkoret uppfylls eller ej. För att göra samma sak för bokstäver så använder ni pattern Kod:
.Pattern = "[A-Za-z/_/$]{" & intChar & "}"

Vill ni lära er mer om RegExp så finns det tre stycken artiklar ifrån Guffa på ASPsidan som man kan läsa.

Redigerad: 2007-08-23
La till en lösning med RegExp. //MacTommy
 
     

  » Logga in  
 
Användarnamn

Lösenord

 
     

  » Bli medlem  
  Bli medlem på ASPsidan!  
     

     
  Microsoft  
     

  » Partners  
  Comsolvia  
     
  » ANNONS  
  ingen annons än  
     

  » Senast online  
  Endast för inloggade  
  Antal inloggade: 1  
     

Copyright © 2007 www.ASPsidan.se
ingen sponsrar längre ASPsidan med Dedikerad Server
ASPsidan RSS
   
 XHTML / CSS
Det tog 0,0781 sekunder att ladda sidan