Niveau de sécurité du mot de passe(javascript)

Eléphanteau du PHP | 26 Messages

23 avr. 2007, 10:16

Code : Tout sélectionner

function testPassword(passwd) { var description = new Array(); description[0] = "<table border=0 cellpadding=0 cellspacing=0><tr><td><table cellpadding=0 cellspacing=2><tr><td height=15 width=30 bgcolor=#ff0000></td><td height=15 width=120 bgcolor=#dddddd></td></tr></table></td><td class=bold>Faible</td></tr></table>"; description[1] = "<table border=0 cellpadding=0 cellspacing=0><tr><td><table cellpadding=0 cellspacing=2><tr><td height=15 width=60 bgcolor=#bb0000></td><td height=15 width=90 bgcolor=#dddddd></td></tr></table></td><td class=bold>Non &eacute;valu&eacute;e</td></tr></table>"; description[2] = "<table border=0 cellpadding=0 cellspacing=0><tr><td><table cellpadding=0 cellspacing=2><tr><td height=15 width=90 bgcolor=#ff9900></td><td height=15 width=60 bgcolor=#dddddd></td></tr></table></td><td class=bold>Moyenne</td></tr></table>"; description[3] = "<table border=0 cellpadding=0 cellspacing=0><tr><td><table cellpadding=0 cellspacing=2><tr><td height=15 width=120 bgcolor=#00bb00></td><td height=15 width=30 bgcolor=#dddddd></td></tr></table></td><td class=bold>&Eacute;lev&eacute;(e)</td></tr></table>"; description[4] = "<table border=0 cellpadding=0 cellspacing=0><tr><td><table cellpadding=0 cellspacing=2><tr><td height=15 width=150 bgcolor=#00ee00></td></tr></table></td><td class=bold>OPTIMALE</td></tr></table>"; description[5] = "<table border=0 cellpadding=0 cellspacing=0><tr><td><table cellpadding=0 cellspacing=2><tr><td height=15 width=150 bgcolor=#dddddd></td></tr></table></td><td class=bold></td></tr></table>"; var intScore = 0 var strVerdict = 0 // PASSWORD LENGTH if (passwd.length==0 || !passwd.length) // length 0 { intScore = -1 } else if (passwd.length>0 && passwd.length<5) // length between 1 and 4 { intScore = (intScore+3) } else if (passwd.length>4 && passwd.length<8) // length between 5 and 7 { intScore = (intScore+6) } else if (passwd.length>7 && passwd.length<12)// length between 8 and 15 { intScore = (intScore+12) } else if (passwd.length>11) // length 16 or more { intScore = (intScore+18) } // LETTERS (Not exactly implemented as dictacted above because of my limited understanding of Regex) if (passwd.match(/[a-z]/)) // [verified] at least one lower case letter { intScore = (intScore+1) } if (passwd.match(/[A-Z]/)) // [verified] at least one upper case letter { intScore = (intScore+5) } // NUMBERS if (passwd.match(/\d+/)) // [verified] at least one number { intScore = (intScore+5) } if (passwd.match(/(.*[0-9].*[0-9].*[0-9])/)) // [verified] at least three numbers { intScore = (intScore+5) } // SPECIAL CHAR if (passwd.match(/.[!,@,#,$,%,^,&,*,?,_,~]/)) // [verified] at least one special character { intScore = (intScore+5) } // [verified] at least two special characters if (passwd.match(/(.*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~])/)) { intScore = (intScore+5) } // COMBOS if (passwd.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/)) // [verified] both upper and lower case { intScore = (intScore+2) } if (passwd.match(/(\d.*\D)|(\D.*\d)/)) // [FAILED] both letters and numbers, almost works because an additional character is required { intScore = (intScore+2) } // [verified] letters, numbers, and special characters if (passwd.match(/([a-zA-Z0-9].*[!,@,#,$,%,^,&,*,?,_,~])|([!,@,#,$,%,^,&,*,?,_,~].*[a-zA-Z0-9])/)) { intScore = (intScore+2) } if(intScore == -1) { strVerdict = description[5]; } else if(intScore > -1 && intScore < 16) { strVerdict = description[0]; } else if (intScore > 15 && intScore < 25) { strVerdict = description[1]; } else if (intScore > 24 && intScore < 35) { strVerdict = description[2]; } else if (intScore > 34 && intScore < 45) { strVerdict = description[3]; } else { strVerdict = description[4]; } document.getElementById("Words").innerHTML= (strVerdict); }

voyez demo :
http://www.vopoto.com/?inscription.html

Eléphant du PHP | 99 Messages

01 mai 2007, 19:40

C'est possible d'avoir le max?

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

01 mai 2007, 20:29

Même si on comprend ce que ça fait, c'est toujours agréable d'avoir une petite description. C'est pas une brocante de scripts ici...

Petit nouveau ! | 1 Messages

05 juin 2007, 15:02

C'est possible d'avoir le max?
Oui mais ce n'est pas facile !

Eléphanteau du PHP | 43 Messages

23 sept. 2007, 00:32

Bonsoir ;)

Qui pourrai me dire comment on l'installe svp merci a celui qui veut bien aider le noob ^^

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

23 sept. 2007, 00:46

Voilà ce qui arrive qu'on on poste n'importe comment (comme signalé par ouckileou)

il faut un champ input ayant en id "Words" et un évenement onkeyup avec la valeur du champ lorsqu'on relache la touche :
<input type="text" id="Words" value="" onkeyup="testPassword(this.value);"/>
Ceci dit il n'est pas super précis...
mot de passe testé : H6f9MBxy1

je me retrouve dans une sécurité "moyenne"... :?

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 43 Messages

23 sept. 2007, 00:54

Je te remercie tu sait pas ou qu'il y'en aurai un de précis ?

Edite : j'ai mit approxitamivement le même code et j'ai pas les couleur me disant le niveau de sécurité
<input size="26" value="" onkeyup="testPassword(this.value);" type="password" id="Words">
et en dessous j'ai mit :
<a id="Words"><table cellpadding="0" cellspacing="2"><tbody><tr><td bgcolor="#dddddd" height="15" width="150"></td></tr></tbody></table>
je sais pas si c'est bon ?

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

23 sept. 2007, 01:48

mouarf... en effet j'y suis allé un peu vite.
L'id Words doit être un conteneur pour la couleur bla bla bla

donc ce que tu as fait est correct mais du coup il faut sortir l'id du champ texte (un id est unique par page) et pas besoin de préremplir :
<input size="26" value="" onkeyup="testPassword(this.value);" type="password" id="passWords">
<span id="Words"></span>
Pas d'autre script à proposer... google :wink:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 43 Messages

23 sept. 2007, 01:58

Je viens d'essayer dès que j'ai mit ceci
<span id="Words"></span>
Le font ou les couleurs doit s'afficher n'apparait plus :(

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

23 sept. 2007, 11:30

Ouvre un sujet dans le forum Javascript en posant un peu plus de code et un lien vers ce post
(Tu n'as qu'un seul id "Words" dans la page ?)

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Petit nouveau ! | 7 Messages

30 oct. 2007, 16:08

Voilà ce qui arrive qu'on on poste n'importe comment (comme signalé par ouckileou)

il faut un champ input ayant en id "Words" et un évenement onkeyup avec la valeur du champ lorsqu'on relache la touche :
<input type="text" id="Words" value="" onkeyup="testPassword(this.value);"/>
Ceci dit il n'est pas super précis...
mot de passe testé : H6f9MBxy1

je me retrouve dans une sécurité "moyenne"... :?
Je dois avouer que pour mon système personnel (dans un autre langage, sous une autre forme), j'ai rajouté des critères comme par exemple celui de l'alternance de caractère, en plus de vérifier leur présence. En gros, H6F9MBxy1 obtient un niveau de sécurité plus élevé que HFMB691xy par exemple !

(niveau de sécurité évalué comme "fort" pour le premier, et non pas "moyen", qui est obtenu par le second ;))

Eléphant du PHP | 445 Messages

30 oct. 2007, 16:21

Il faut aussi prendre en compte le 1er caratère du mot de passe.

Un mot de passe qui commence par A seras moins sur qu'un mot de passe qui commence par N par exemple.

Petit nouveau ! | 7 Messages

30 oct. 2007, 16:35

oui mais à ce niveau là, pour assigner un score ça devient plus complexe, surtout que le premier caractère ok, mais il faut aussi penser au second, et aux suivants ... car il est certain que aaaaaaa sera moins sécurisé que abcdef etc..

PS: je vais voir si je peux améliorer mon système en ce sens, ça peut être utile, sait-on jamais ^^
PS2: déjà, en comptant le nombre de caractères UNIQUES plutôt que le nombre de caractères, on peut obtenir une valorisation plus juste, mais je dois avouer que je ne sais pas si valoriser N par rapport à A est juste, en effet si on fait un force-brute en partant par la fin (ce qui se fait de plus en plus étant donné que les gens avec un mot de passe en Z se sentent plus en sécurité), on trouvera N avant A

Eléphant du PHP | 445 Messages

30 oct. 2007, 16:52

PS2: déjà, en comptant le nombre de caractères UNIQUES plutôt que le nombre de caractères, on peut obtenir une valorisation plus juste, mais je dois avouer que je ne sais pas si valoriser N par rapport à A est juste, en effet si on fait un force-brute en partant par la fin (ce qui se fait de plus en plus étant donné que les gens avec un mot de passe en Z se sentent plus en sécurité), on trouvera N avant A
Avec un N on est a 12/13 de A/Z ce qui est dans tout les cas plus sur que A ou Z.
En partant de Z, N est plus proche que A mais en partant de A c'est l'inverse.
Voila pourquoi N est un bon compromis.

Et comme tu l'as remarque, il faut aussi prendre les caractères suivant.

La plupart des brute force font a->z puis A->Z puis caracteres speciaux.

Petit nouveau ! | 7 Messages

30 oct. 2007, 16:55

Certes la plupart, mais bon, on n'est jamais à l'abris.

De toutes façons, évaluer la sécurité d'un mot de passe est difficile, il faudrait donc attribuer une valeur à chaque caractère, donc le N vaudrait plus que le A ou le Z, mais alors le 5 vaudrait plus que le 0 ou le 9, et qu'en est-il du 4 qui vaudrait plus que le 0 ou le 9 mais moins que le 5 ? etc... et assigner une valeur à chaque caractère n'est pas superbe, on pourrait obtenir un mot de passe 5N5n plus sécurisé qu'une chaine plus complexe ... enfin c'est un terrain à arpenter, mais prudemment ^^

En fait, mon système actuel me donne ça comme réponses à des évaluations:

Niveau de sécurité du mot de passe H6f9MBxy1: fort
Niveau de sécurité du mot de passe HFMB691xy: moyen
Niveau de sécurité du mot de passe x0jHyb: moyen
Niveau de sécurité du mot de passe kikoolol: minimal
Niveau de sécurité du mot de passe KIKOOLOL: minimal
Niveau de sécurité du mot de passe kikooLOL: faible
Niveau de sécurité du mot de passe kikooLOL~785: optimal
Modifié en dernier par Nashii le 30 oct. 2007, 17:00, modifié 1 fois.