[PHP] Sterk wachtwoord eisen aan gebruiker

Pagina: 1
Acties:
  • 170 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • DeepFreeze.NL
  • Registratie: April 2006
  • Laatst online: 02-03 08:01
Met mijn basiskennis van PHP :) heb ik na een tijdje rommelen het volgende script in elkaar kunnen zetten:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Wachtwoord moet minimaal bestaan uit 8 tekens waarvan 1 kleine letter, 1 hoofdletter en 1 cijfer
$alpha_list = '/[a-z]/';
$caps_list = '/[A-Z]/';
$numeric_list = '/[0-9]/';
$symbol_list = '/^[~!@#$%^&*()-_=+[]{}\/;:<>?.]$/';

if (
strlen($_POST['wachtwoord']) > 7 // at least 7 chars
&& preg_match($alpha_list, $_POST['wachtwoord'])
&& preg_match($caps_list, $_POST['wachtwoord'])
&& preg_match($numeric_list, $_POST['wachtwoord'])
&& preg_match($symbol_list, $_POST['wachtwoord'])
) {
echo "goed";
} else {
die('Wachtwoord moet minimaal bestaan uit 8 tekens waarvan 1 kleine letter, 1 hoofdletter en 1 cijfer.');
}


Dit script is een onderdeel van een registratieformulier zodat nieuwe gebruikers alleen maar een sterk wachtwoord kunnen gebruiken. Nu krijg ik alleen dat er altijd een melding wordt gegeven dat het wachtwoord onjuist is, ook als ik aan die condities voldoe. Wat doe ik nou fout?

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

'$alpha_list'
Je moet variabelen natuurlijk niet binnen quotes zetten; als je dat dan toch wil moet je dubbele quotes gebruiken :)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

Verwijderd

Doe eens
PHP:
1
echo '$alpha_list'
en je wist precies wat er fout gaat.
Zet nooit variabelen tussen quotes als dat niet hoeft. Met dubbele quotes is het niet nodig, en met enkele quotes werkt het in dit geval niet zoals jij verwacht.

Daarnaast is die $symbol_list niet eens een regular expression, en je zou over elk van de 4 preg_match calls een foutmelding horen krijgen omdat je geen geldige delimiters zou hebben.
Kortom, zorg er ook even voor dat je alle waarschuwingen/errors/notificaties te zien krijgt. Configureer je server zo dat je er fatsoenlijk op kunt programmeren.

Tot slot is het wellicht eenvoudiger om hiervoor de cracklib functies te gebruiken, maar die is niet altijd voor handen.

[ Voor 9% gewijzigd door Verwijderd op 01-04-2007 15:17 ]


Acties:
  • 0 Henk 'm!

  • DeepFreeze.NL
  • Registratie: April 2006
  • Laatst online: 02-03 08:01
Ik heb die haakjes weggehaald, en de server warnings aanstaan.
Ik krijg nog steeds dezelfde melding (Wachtwoord moet minimaal bestaan ... ...) en geen andere warnings ofzo.

En echo $alpha_list geeft /[a-z]/ als uitkomst.

[ Voor 12% gewijzigd door DeepFreeze.NL op 01-04-2007 15:27 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Het wachtwoord waarmee je test is langer dan 7 tekens, dus minstens 8?
En heb je die 4e regular expression al gerepareerd met vierkante haakjes, en het escapen van de tekens die geëscapet moeten worden?

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Warning: preg_match(): No ending delimiter '~' found in test.php on line 12
Maar als ik jou was zou ik nog eens een regexp handleiding doorlezen want de missende delimiter is niet het enige wat er fout is. Tip; kijk eens naar je werkende character-blocks; en vergelijk die met de laatste

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • WormLord
  • Registratie: September 2003
  • Laatst online: 10:10

WormLord

Devver

Wat wil je eigenlijk met die match op $symbol_list controleren?
Want als ik de correcte escaping er even bij denk, dan zie ik daar een controle of het wachtwoord bestaat uit precies 1 teken uit de opgegeven lijst. En dat zal dus altijd conflicteren met de eis van minimaal 8 teken :) .

Acties:
  • 0 Henk 'm!

Verwijderd

Die ^ aan het begin en $ aan het eind horen daar inderdaad niet. Die stonden er eerst ook niet. Ik vind het behoorlijk irritant dat de topicstart geëdit wordt, zo snapt dadelijk niemand er meer wat van.
Pagina: 1