[js][regex] Wachtwoordsterkte met rexexp bepalen...

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben in javascript bezig met een reguliere expressie om te testen of het wachtwoord te kort, zwak, matig of sterk is.

te kort is minder dan 5 karakters
zwak is 5 karakters of meer ( alleen lowercase letters)
matig is 5 karakters of meer icm minimaal 1 ander karakter (hoofdletter, cijfer of speciaal teken ( dus: !@#$%^&*() )
sterk is vanaf 8 karakters waarvan minimaal 1 cijfer en 1 ander karakter (hoofdletter of speciaal teken).

Nu heb ik geprobeerd dit te verzamelen in een regex en ben tot het volgende gekomen:

JavaScript:
1
2
3
4
5
6
7
8
9
    [null,"tekort","te kort"],
    
    [/^(?=.*[a-z]).{5,}$/,"zwak","zwak"],
    
    [/^(?=.*\d)(?=.*[a-z])(?=.*\d).{5,}$/,"matig","matig"],
    [/^(?=.*[a-z])(?=.*[A-Z]).{5,}$/,"matig","matig"],
    [/^(?=.*[a-z])(?=.*[\!@#\$%\^&\*\(\)]).{5,}$/,"matig","matig"],
    
    [/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=*[\!@#\$%\^&\*\(\)]).{8,}$/,"sterk","sterk"]


de "te kort" en "zwak" werken. En de "sterk" werkt gedeeltelijk. Deze wil zowel een speciaal teken, als een cijfer als een hoofdletter maar dat is niet nodig zoals in de omschrijving staat.

De "matig" werkt niet ook deels omdat ik eigenlijk een "of" constructie wil maken in de regex. Dus dat hij 5 karakters bevat waarvan: OF 1 cijfer, OF 1 hoofdletter OF 1 speciaal teken.

Weet iemand van jullie hoe ik deze twee probleempjes kan verhelpen?

Acties:
  • 0 Henk 'm!

  • Spinal
  • Registratie: Februari 2001
  • Laatst online: 08-09 14:12
(jarig!)
Ik gebruik zelf deze: http://www.geekwisdom.com/dyn/passwdmeter
Misschien kun je dit aanpassen aan je eigen wensen?

Full-stack webdeveloper in Groningen


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:42

crisp

Devver

Pixelated

Waarom zou je al je voorwaarden voor 1 klasse met een enkele regexp willen testen? Wij doen het ongeveer zo:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
punten = lengte wachtwoord;

mix = 0;
bevat kleine letter? mix += 1;
bevat hoofletter? mix += 1;
bevat speciaal teken? mix += 1;
bevat een nummer? mix += 1;

totaal voor mixed: (mix - 1) * 3;
punten += totaal voor mixed;

voor elk teken dat maar 1 keer voorkomt: punten += 1;

punten > 30: supersterk
punten > 25: sterk
punten > 20: vrij sterk
punten > 15 redelijk
punten > 10 zwak
punten <= 10 zeer zwak


oftewel: een aantal simpele checks, leesbare code en een begrijpelijk algoritme dat eenvoudig nog te tweaken is :)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Even afgezien van dat ik dit ook niet met een enkele regexp zou doen:
Verwijderd schreef op maandag 23 november 2009 @ 14:20:
En de "sterk" werkt gedeeltelijk. Deze wil zowel een speciaal teken, als een cijfer als een hoofdletter maar dat is niet nodig zoals in de omschrijving staat.
Volgens mij werkt hij niet omdat er een punt ontbreekt. ;) Maar je kan toch de mogelijke karakters in 1 keer tussen [ en ] zetten om een 'of' te krijgen?
code:
1
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z\!@#\$%\^&\*\(\)]).{8,}$

Enkel is 123456a! nou zo'n sterk wachtwoord? En er zijn toch nog veel meer bijzondere tekens (/[^a-zA-Z0-9]/)?

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • IStealYourGun
  • Registratie: November 2003
  • Laatst online: 25-08 20:13

IStealYourGun

Доверяй, но проверяй

♥ Under Construction ♦ © 1985 - 2013 and counting. ♣ Born to be Root ★ In the end, we are all communists ♠ Please, don't feed me meat


Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Nou uhm dat ding labelt de volgende tests allemaal als 0% safe:
code:
1
2
3
45-43-aap-45
pizz4i40p
a3+948aa:983

Leuk algoritme maar het penalized repetition iets te zwaar ;)

Puur voor indicaties is crisp's algoritme aardig, en performant voor in de praktijk.

Professionele website nodig?


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
pedorus schreef op maandag 23 november 2009 @ 21:12:
Even afgezien van dat ik dit ook niet met een enkele regexp zou doen:

[...]

Volgens mij werkt hij niet omdat er een punt ontbreekt. ;) Maar je kan toch de mogelijke karakters in 1 keer tussen [ en ] zetten om een 'of' te krijgen?
code:
1
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z\!@#\$%\^&\*\(\)]).{8,}$

Enkel is 123456a! nou zo'n sterk wachtwoord? En er zijn toch nog veel meer bijzondere tekens (/[^a-zA-Z0-9]/)?
hmm ik ga t morgen even testen tnx...

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
curry684 schreef op maandag 23 november 2009 @ 23:44:
[...]

Nou uhm dat ding labelt de volgende tests allemaal als 0% safe:
code:
1
2
3
45-43-aap-45
pizz4i40p
a3+948aa:983

Leuk algoritme maar het penalized repetition iets te zwaar ;)

Puur voor indicaties is crisp's algoritme aardig, en performant voor in de praktijk.
Het lijkt me dat het toevoegen van karakters nooit tot een daling van de score zou moeten kunnen leiden. a3+948a scoort daar 62%. Doe mij ook maar crisps algoritme. :) Het mooie daarvan is ook dat je heel veel gradaties terug kan krijgen. Het nadeel is alleen dat sommige dingen zoals '123456789' of 'pedorus!' als 'redelijk' worden gezien, terwijl het gewoon zeer beroerde en vaak voorkomende wachtwoorden zijn.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

Verwijderd

crisp schreef op maandag 23 november 2009 @ 20:37:
oftewel: een aantal simpele checks, leesbare code en een begrijpelijk algoritme dat eenvoudig nog te tweaken is :)
Ik mis nog de test of het wachtwoord de verjaardag van je dochter of echtgenote is...

Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Verwijderd schreef op dinsdag 24 november 2009 @ 09:06:
[...]
Ik mis nog de test of het wachtwoord de verjaardag van je dochter of echtgenote is...
Het doel is een wachtwoord dat een bruteforce aanval overleeft; niet een wachtwoord dat een aanval door een bekende overleeft. 01-01-1979 is voor veel doeleinden een prima wachtwoord.

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:42

crisp

Devver

Pixelated

Verwijderd schreef op dinsdag 24 november 2009 @ 09:06:
[...]

Ik mis nog de test of het wachtwoord de verjaardag van je dochter of echtgenote is...
Een datum is nog steeds zwak tot redelijk ;)

Maar goed, het is maar een voorbeeld hoe je redelijk efficient en eenvoudig een dergelijke check zou kunnen opzetten. Uiteindelijk is het ook maar een indicatie, en ik denk dat juist het feit dat je een indicatie geeft mensen al beter doet nadenken over het wachtwoord dat ze kiezen :)

Intentionally left blank

Pagina: 1