[Functie] Wachtwoord complexheid

Door Elwin - Fratsloos, 24 jaar geleden, 9.440x bekeken

Het controleren van een wachtwoord in PHP kan nogal lastig zijn. De lengte kan iedereen wel controleren. Maar hoe zit het nou met hoofdletters en kleine letters?

Dan wordt het al een stuk moeilijker. Je kan bijvoorbeeld elke karakter van het wachtwoord gaan vergelijken met a-z, A-Z en 0-9. Maar dat is ondoenelijk. En wat dan als je vreemde tekens wilt: ^&<(. Ga je die ook allemaal controleren.

Op ASCII niveau ligt dat wat anders. Elk karakter heeft in ASCII een bepaalde waarde, en die kan je bijvoorbeeld weer (hexa)decimaal oproepen. Een overzicht daarvan zie je op http://www.asciitable.com/.

Deze functie gaat helpen bij het controleren op complexheid van een wachtwoord. Hierin worden vier niveaus onderscheiden:
0 - Geen complexheid
1 - letters (klein of hoofdletters) en cijfers (vb. err565 of Rer215)
2 - kleine letters, hoofdletters en cijfers (v.b. RTdsd34)
3 - kleine letters, hoofdletters, cijfers en vreemde tekens (v.b. TRdfs676&$)

Daarnaast controleert het op het aantal karakters van het wachtwoord.

Gebruik
check_password( string password, int lengte, int complexheid)

De functie geeft TRUE terug als het wachtwoord complexgenoeg is en FALSE indien dit niet is.

Vb.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$wachtwoord
= "PHPhulp12";
if(!check_password($wachtwoord,6,2)) {
  echo "fout";
}
else {
  echo "goed";
}

?>


Uitvoer van bovenstaande code geeft goed.

De code hieronder is alleen de functie en niet het formulier als op het voorbeeld!

Voorbeeld: http://fratsloos.nl/phphulp/Wachtwoord_Complexheid_1.0/wacht

Gesponsorde koppelingen

PHP script bestanden

  1. functie-wachtwoord-complexheid

 

Er zijn 20 reacties op 'Functie wachtwoord complexheid'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen


24 jaar geleden
 
0 +1 -0 -1
Ziet er mooi en simpel uit. Alleen het maakt mij eigenlijk niet uit hoe het wachtwoord van een "member" eruit ziet. Deze sla ik toch op in md5 en wil ik ook niet meer terug zien en dan kan de member lekker zelf rare tekens gebruiken e.d. (hij moet natuurlijk wel 6 tekens of langer zijn, dat is mijn enige controle)

Maar goed voor de mensen die dit nodig hebben is het erg handig
Onbekend onbekend
onbekend onbekend
24 jaar geleden
 
0 +1 -0 -1
Ik gebruik voor mijn wachtwoorden altijd md5();

Werkt altijd, hoe complex de opbouw van het wachtwoord ook is :-)
Elwin - Fratsloos
Elwin - Fratsloos
24 jaar geleden
 
0 +1 -0 -1
Het gaat er om dat het ingevoerde wachtwoord complex is. Niet hoe je het in de database schrijft. Zoals we van de week al hebben gezien zijn simpele md5-wachtwoorden snel te brute-forcen.

Deze functie kan je overigens ook gebruiken met andere encode functies.

Op het voorbeeld kan je overigens duidelijk zien dat PHPhulp iets heel anders is dan bijvoorbeeld PHPHulp.

Elwin
Steff   an
Steff an
24 jaar geleden
 
0 +1 -0 -1
Er is hier ook een php functie voor Crack.
Frank
Frank
24 jaar geleden
 
0 +1 -0 -1
Leuk script! Dit zet zoden aan de dijk wanneer je het hebt over beveiliging.

Bedankt, ik ga het zeker gebruiken. Zo zie je maar weer waar een discussie toe leidt.
Elwin - Fratsloos
Elwin - Fratsloos
24 jaar geleden
 
0 +1 -0 -1
Steffan:
Er is hier ook een php functie voor Crack.
Maar daar heb je een lib voor nodig.. :S

Elwin
Steff   an
Steff an
24 jaar geleden
 
0 +1 -0 -1
Ben jij iemand met download angst dan??
Martijn B
Martijn B
24 jaar geleden
 
0 +1 -0 -1
Dan moet iedereen die lib hebben.


Voor gebruikers met bepaalde rechten ( admin, moderator, enz ) is dit wel een mooie manier om een wachtwoord te controleren. Dan kun je dus ook niet het wachtwoord gebruiken dat je meestal invoeren en dat is alleen maar goed lijk mij.
Voor normale gebruikers vind ik minimaal 6 karakters wel voldoende.
Mitch X
Mitch X
24 jaar geleden
 
0 +1 -0 -1
Quote:
Ben jij iemand met download angst dan??

Alsof jij het altijd voor het zeggen hebt.
Je host moet het er maar net op hebben staan/willen zetten.
Jordi
Jordi
24 jaar geleden
 
0 +1 -0 -1
Leuke functie als je het nodig hebt, maar in principe kun je overal $ok = FALSE ook best vervangen door return false toch? Bovendien vind ik je switch statement (met al die conditionals) niet zo sterk. Ik zou hem als volgt herschrijven:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
if (!$complex) // $complex == 0
  return true;
elseif($complex < 0 && $complex > 3) {
  echo 'Error! Third argument of check_wachtwoord() has to be an integer between 0 and 3.';
  return false;
}
else {
    switch ($complex) {
      case
1:
        // Check $password on chars and ints
        return ($int && ($lower || $upper));
      case
2:
        // check $password on ints, lower and upper chars
        return ($upper && $int && lower);
      case
3:
        // check $password on ints, lower chars, upper chars and complex chars
        return ($comp && $upper && $int && lower);
    }
  }

?>

Zoals je misschien wel ziet, heb ik ook de volgordes van je checks veranderd. Dit heb ik gedaan, omdat PHP wat dat betreft lekker lui is en alleen maar doet wat hij moet doen. Dus als je allemaal statements hebt die door && worden gescheiden, kapt hij er al mee als de eerste false oplevert. Ik denk dat de kans dat mensen geen complexe tekens gebruiken het grootst is, daarna hoofdletters, getallen en kleine letters.

Het verandert niets heel drastisch, maar het optimaliseert de performance een beetje, denk ik.


24 jaar geleden
 
0 +1 -0 -1
Uhm, waarom gebruik je niet gewoon een regular expression?
Jordi
Jordi
24 jaar geleden
 
0 +1 -0 -1
Ik weet niet waarom Elwin geen regular expressions gebruikt, maar ik dekn dat dat wel een goede keuze is. Bij complexiteit 3 moet je dan 4 regular expressions doen en dat lijkt me nieteens heel veel minder code dan wat Elwin nu heeft. Bovendien zijn regular expressions langzaam.
Jordi
Jordi
24 jaar geleden
 
0 +1 -0 -1
Ik zat trouwens te denken: Is het niet handig om aan elk wachtwoord dat je tegenkomt een string toe te voegen die een hoge complexiteit heeft? Dus zo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
define('SALT', 'v3Nu$');
$hash = md5($password . SALT);
?>


Op die manier is het wachtwoord altijd minstens 6 characters lang en heeft het altijd complexiteit 3. Als je die string nog wat langer maakt, is het wachtwoord nog moeilijker te kraken.

Vinden jullie dit een goede oplossing? Ik kan me namelijk voorstellen dat het misschien minder veilig is als mensen achter deze geheime string komen, maar dan nog moeten ze het gewone wachtwoord kraken (ze weten dan immers alleen de laatste characters) en bovendien denk ik dat als iemand zodanig bij je heeft ingebroken dat hij die string kan zien (dat hij dus je PHP-code kan bekijken), dat hij wel meer schade aan kan richten...


23 jaar geleden
 
0 +1 -0 -1
k ben een beetje noob maaruh , wa is md5?
Lissy Pixel
Lissy Pixel
23 jaar geleden
 
0 +1 -0 -1
http://www.phphulp.nl/php/tutorials/4/97/164/

Hier wat uitleg hierover.
Suc6 ermee!
Groetjes, lissy
K i p
K i p
22 jaar geleden
 
0 +1 -0 -1
@webmakerij: Waarom moet het langer dan 6 tekens zijn?


22 jaar geleden
 
0 +1 -0 -1
@Boris
Kwestie van veiligheid. Mogelijke MD5's tot 6 tekens zijn nog wel te berekeninen binnen een paar uur.
Robert Deiman
Robert Deiman
22 jaar geleden
 
0 +1 -0 -1
"Op die manier is het wachtwoord altijd minstens 6 characters lang en heeft het altijd complexiteit 3. Als je die string nog wat langer maakt, is het wachtwoord nog moeilijker te kraken."

Hoe kom je hier in hemelsnaam eigenlijk bij? Je slaat het nu wel op met die extra tekens, maar om in te loggen hoeft nog steeds alleen het normale password gekraakt te worden, ennehh.. als je 1 password hebt en een 2e en je ziet die extra tekens (die hetzelfde zijn) dan weet je voldoende..
Dus extra veilig wordt het niet echt.
Legolas
Legolas
22 jaar geleden
 
0 +1 -0 -1
extra veiligheid is meer:
zeer complex wachtwoord
de server een speciale code
in de db een hash van het wachtwoord met de speciale code er achter
die server code moet dan wel aan niemand toegankelijk zijn
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Matthias R
Matthias R
19 jaar geleden
 
0 +1 -0 -1
Mooi script,
kan nog vanpas komen het deze pagina tussen favo's opgeslagen

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. functie-wachtwoord-complexheid

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.