Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ESTIMATION DU DEGRÉ DE CONFIANCE À ACCORDER À UN MOT DE PASSE (OU NIVEAU DE SÉCURITÉ)


Information sur la source

Catégorie :Formulaire Classé sous : motdepasse, sécurité, identification, expression régulière Niveau : Initié Date de création : 26/08/2008 Date de mise à jour : 02/09/2008 16:27:22 Vu / téléchargé: 3 052 / 380

Note :
7 / 10 - par 1 personne
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Suite aux commentaires postés sur les sources de Zuff (4/9/07) et d'Axel971 (22/4/06), qui déterminent la sécurité offerte par un mot de passe, j'ai écrit un nouveau javascript qui soit capable de distinguer les différents types de caractères (majuscules, minuscules, chiffres, accents, non-aplanumériques), leur répétition, et leur succession.

A partir de là, le javascript retourne un score qui est utilisé par un vumètre un peu plus sophistiqué que dans les sources précédents (8 niveaux au lieu de 3).

Il y a un peu d'expressions régulières basiques pour ceux qui souhaitent se faire la main avec :-)

 

Source

  • function max_tableau(tableau) // retourne la longueur de l'élément le plus long d'un tableau de chaines de caractères
  • {
  • taille = 0;
  • while (tableau.length > 0) {
  • ligne = tableau.pop().length;
  • if (ligne > taille) {
  • taille=ligne;
  • }
  • }
  • return taille;
  • }
  • function dedoublonne(chaine) // élimine les caractères en doublon dans une chaine
  • {
  • tableau = chaine.split('').reverse();
  • resultat = '';
  • while (tableau.length > 0) {
  • caractere = tableau.pop();
  • if (tableau.indexOf(caractere) == -1) { resultat += caractere; }
  • }
  • return resultat;
  • }
  • function securite_mdp(champ_mdp) // calcul le niveau de confiance à accorder à un mot de passe
  • {
  • // Pour que cela fonctionne avec IE 6 ou 7, il faut procéder aux changements suivants :
  • //
  • // majuscule = max_tableau(mdp.split(/[^A-Z]/));
  • // minuscule = max_tableau(mdp.split(/[^a-z]/));
  • // lettre = max_tableau(mdp.split(/[^a-zA-Z]/));
  • // chiffre = max_tableau(mdp.split(/[^0-9]/));
  • // different = max_tableau(mdp.split(/[^a-zA-Z0-9]/));
  • // accent = 0;
  • // nonalphanum = different;
  • //
  • // et modifier le calcul du score pour prendre en compte le fait que les accents ne sont pas reconnus.
  • //
  • // On peut savoir si on a affaire à IE avec le test suivant par exemple :
  • //
  • // if ((navigator.appVersion.indexOf('MSIE') != -1) { alert('Internet Explorer'); }
  • //
  • mdp = champ_mdp.value.replace(/^\s*/,'').replace(/\s*$/,''); // suppression des espaces en début et fin
  • longueur = mdp.length; // longueur du mot de passe
  • if (longueur >= 6) // taille minimum du mot de passe = 6
  • {
  • majuscule = max_tableau(mdp.split(/[^A-ZÀÂÄÇÉÈÊËÎÏÔÖÙÛܾ]/)); // plus grand nombre de lettres majuscules successives
  • minuscule = max_tableau(mdp.split(/[^a-zàâäçéèêëîïôöùûüÿ]/)); // plus grand nombre de lettres minuscules successives
  • lettre = max_tableau(mdp.split(/[^a-zA-ZàâäçéèêëîïôöùûüÿÀÂÄÇÉÈÊËÎÏÔÖÙÛܾ]/)); // plus grand nombre de lettres successives
  • chiffre = max_tableau(mdp.split(/[^0-9]/)); // plus grand nombre de chiffres successives
  • different = dedoublonne(mdp).length; // nombre de caractères différents
  • if (majuscule == longueur || minuscule == longueur || chiffre == longueur || different == 1) {
  • score = 1; // score maximum s'il n'y a que des caractères d'un même type
  • } else {
  • score = different;
  • score -= majuscule;
  • score -= minuscule;
  • if (score < 2) {score = 2;} // score minimum s'il y a des majuscules et minuscules
  • if (chiffre > 0) {score++;}
  • accent = mdp.split(/[àâäçéèêëîïôöùûüÿÀÂÄÇÉÈÊËÎÏÔÖÙÛܾ]/).length-1; // nombre d'occurence de caractères accentués français
  • nonalphanum = mdp.split(/[^A-Za-z0-9]/).length-1-accent; // nombre d'occurence de caractères non-alphanumérique
  • if (accent > 0) {score++;} // bonus en présence d'accent(s)
  • if (nonalphanum > 0) {score += 2;} // bonus en présence de caractère(s) non-alphanumérique(s)
  • if (majuscule > 0 && minuscule > 0 && chiffre >0 && accent > 0 && nonalphanum > 0) {score++;} //bonus pour la présence de caractères de différent type
  • if (score > 6 && lettre > (longueur/2)) {score = 6;} // score maximum s'il y a trop de lettres qui se suivent
  • }
  • } else {
  • score = 0; // score nul pour un mot de passe trop court
  • }
  • return score;
  • }
  • function vumetre_mdp(degre, style) // affiche les couleurs en fonction du score obtenu
  • {
  • var couleurs = new Array ('#c00', '#f00', '#ff4000', '#ff8000', '#ffc000', '#ff0', '#c0ff00', '#0f0'); // couleurs du vumètre
  • document.getElementById(style+'0').style.color='inherit'; // affichage du texte précédent les cases
  • // document.getElementById(style+'0').style.color='#000'; // version supportée par IE 6 ou 7
  • for (i = 1 ; i <= couleurs.length ; i++)
  • {
  • if (degre >= i) {
  • document.getElementById(style+i).style.background=couleurs[i-1]; // mise en couleur d'une case
  • } else {
  • document.getElementById(style+i).style.background='#fff'; // retour au blanc d'une case
  • }
  • }
  • }
function max_tableau(tableau) // retourne la longueur de l'élément le plus long d'un tableau de chaines de caractères
{
	taille = 0;
	while (tableau.length > 0) {
		ligne = tableau.pop().length;
		if (ligne > taille) {
			taille=ligne;
		}
	}
	return taille;
}

function dedoublonne(chaine) // élimine les caractères en doublon dans une chaine
{
	tableau = chaine.split('').reverse();
	resultat = '';
	while (tableau.length > 0) {
		caractere = tableau.pop();
		if (tableau.indexOf(caractere) == -1) { resultat += caractere; }
	}
	return resultat;
}

function securite_mdp(champ_mdp) // calcul le niveau de confiance à accorder à un mot de passe
{
// Pour que cela fonctionne avec IE 6 ou 7, il faut procéder aux changements suivants :
//
// majuscule = max_tableau(mdp.split(/[^A-Z]/));
// minuscule = max_tableau(mdp.split(/[^a-z]/));
// lettre = max_tableau(mdp.split(/[^a-zA-Z]/));
// chiffre = max_tableau(mdp.split(/[^0-9]/));
// different = max_tableau(mdp.split(/[^a-zA-Z0-9]/));
// accent = 0;
// nonalphanum = different;
//
// et modifier le calcul du score pour prendre en compte le fait que les accents ne sont pas reconnus.
//
// On peut savoir si on a affaire à IE avec le test suivant par exemple :
//
// if ((navigator.appVersion.indexOf('MSIE') != -1) { alert('Internet Explorer'); }
//
	mdp = champ_mdp.value.replace(/^\s*/,'').replace(/\s*$/,''); // suppression des espaces en début et fin
	longueur = mdp.length; // longueur du mot de passe
	if (longueur >= 6) // taille minimum du mot de passe = 6
	{
		majuscule = max_tableau(mdp.split(/[^A-ZÀÂÄÇÉÈÊËÎÏÔÖÙÛܾ]/)); // plus grand nombre de lettres majuscules successives
		minuscule = max_tableau(mdp.split(/[^a-zàâäçéèêëîïôöùûüÿ]/)); // plus grand nombre de lettres minuscules successives
		lettre = max_tableau(mdp.split(/[^a-zA-ZàâäçéèêëîïôöùûüÿÀÂÄÇÉÈÊËÎÏÔÖÙÛܾ]/)); // plus grand nombre de lettres successives
		chiffre = max_tableau(mdp.split(/[^0-9]/)); // plus grand nombre de chiffres successives
		different = dedoublonne(mdp).length; // nombre de caractères différents
		if (majuscule == longueur || minuscule == longueur || chiffre == longueur || different == 1) {
			score = 1; // score maximum s'il n'y a que des caractères d'un même type
		} else {
			score = different;
			score -= majuscule;
			score -= minuscule;
			if (score < 2) {score = 2;} // score minimum s'il y a des majuscules et minuscules
			if (chiffre > 0) {score++;}
			accent = mdp.split(/[àâäçéèêëîïôöùûüÿÀÂÄÇÉÈÊËÎÏÔÖÙÛܾ]/).length-1; // nombre d'occurence de caractères accentués français
			nonalphanum = mdp.split(/[^A-Za-z0-9]/).length-1-accent; // nombre d'occurence de caractères non-alphanumérique
			if (accent > 0) {score++;} // bonus en présence d'accent(s)
			if (nonalphanum > 0) {score += 2;} // bonus en présence de caractère(s) non-alphanumérique(s)
			if (majuscule > 0 && minuscule > 0 && chiffre >0 && accent > 0 && nonalphanum > 0) {score++;} //bonus pour la présence de caractères de différent type
			if (score > 6 && lettre > (longueur/2)) {score = 6;} // score maximum s'il y a trop de lettres qui se suivent
		}
	} else {
		score = 0; // score nul pour un mot de passe trop court
	}
	return score;
}

function vumetre_mdp(degre, style) // affiche les couleurs en fonction du score obtenu
{
	var couleurs = new Array ('#c00', '#f00', '#ff4000', '#ff8000', '#ffc000', '#ff0', '#c0ff00', '#0f0'); // couleurs du vumètre
	document.getElementById(style+'0').style.color='inherit'; // affichage du texte précédent les cases
	// document.getElementById(style+'0').style.color='#000'; // version supportée par IE 6 ou 7
	for (i = 1 ; i <= couleurs.length ; i++)
	{
		if (degre >= i) {
			document.getElementById(style+i).style.background=couleurs[i-1]; // mise en couleur d'une case
		} else {
			document.getElementById(style+i).style.background='#fff'; // retour au blanc d'une case
		}
	}
}

Conclusion

Le code est aisément modifiable pour améliorer l'estimation du "niveau de sécurité" atteint par un mot de passe.

Le zip comprend en plus du javacscript, le xhtml et le css nécessaire pour le tester, ainsi que des fonctions basiques supplémentaires (test si un champ est vide, etc...)

Les commentaires (constructifs :-) sont les bienvenus
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

26 août 2008 14:46:31 :
Explications complémentaires
02 septembre 2008 16:27:22 :
Correctif de la variable majuscule. Ajout de lignes en commentaire pour un fonctionnement (dégradé) avec IE 6 ou 7. En effet, il semble qu'IE ne supporte pas les caractères en UNICODE (dans le javascript de manière générale ? les RegExp ?). Les caractères ISO ont l'air de fonctionner alors que la page est déclarée en UNICODE...

Commentaires et avis

signaler à un administrateur
Commentaire de lassad_haddaji le 27/08/2008 10:20:09

hi!  
seulement une remarque, j'ai testé avec FireFox ca marche mais avec IE7 n'affiche pas le niveau d'estimation.
a+

signaler à un administrateur
Commentaire de the_wwt le 27/08/2008 18:01:21 7/10

Bonjour,
C'est une source qui a son intérêt.
Cependant, pour moi un bon mot de passe, c'est juste une chaine de 8 à 12 caractères qui respecte 3 de ces 4 principes:
* Lettre majuscule,
* Lettre minuscule,
* Chiffre,
* Caractère spéciaux

Dans n'importe quel sens, que cela se suivent ou non, ceux qui a aucune importance.
Cordialement,
Pierrick

signaler à un administrateur
Commentaire de tazbaz le 29/08/2008 20:59:45

je vous félicite pour ce beau boulot tres complet!!


bon courage.

signaler à un administrateur
Commentaire de regis85 le 01/09/2008 19:34:42

Bonjour,

J'ai moi aussi testé cette source très intéressante sous IE7 sans succès.
En revanche aucun Pb sous Firefox 3.

Il n'y a pas une erreur à la ligne 30 ?
majuscule = max_tableau(mdp.split(/[^]/)); // plus grand nombre de lettres majuscules successives

Je ne maîtrise pas les expressions régulières, mais ça veut dire quoi /[^]/

A+

signaler à un administrateur
Commentaire de vilfarfadet le 01/09/2008 22:42:23

Bonjour,

I. concernant IE :

Je n'ai pensé à tester sur IE qu'après avoir déposer le source. Que ce soit le IE6 ou 7 rien... :-(

Mais le problème vient peut-être d'une erreur dans le css, pas forcément du javascript : faut que je regarde de plus près...

II. concernant la ligne 30

J'ai eu un copier/coller malheureux, en attendant un correctif, il faut lire :
majuscule = max_tableau(mdp.split(/[^A-ZÀÂÄÇÉÈÊËÎÏÔÖÙÛܾ]/));

III. Concernant le calcul du score

Personnellement je trouve que "0Bonjour!" est potentiellement moins robuste que "b0n!Jour". Ceci dit je ne suis pas un spécialiste des codes de crack...
Enfin, il est assez facile (il me semble) de moduler ce code pour se contenter de tester la présence des minuscules/majsucules/chiffres/autres.

IV. Merci pour vos remarques

signaler à un administrateur
Commentaire de the_wwt le 02/09/2008 09:47:07

Salut,
Il est certain que "b0n!Jour" est plus secure que "0Bonjour!" mais ça c'est parce que le mot de passe contient un mot du dictionnaire ce que ta source ne peut tester.
Exemple:
adcADC123@# est tout aussi robuste que #aD1dA2Cc3@

Tester les mots du dictionnaire serait un vrai plus, cependant je ne pense pas que ce soit réalisable coté client en javascript.
Cordialement,
Pierrick

signaler à un administrateur
Commentaire de vilfarfadet le 02/09/2008 16:56:24

Bonjour Pierrick,

C'est bien parce que l'on ne peut pas avoir un dictionnaire coté client que je me suis préoccupé de distinguer tous les "types" de caractères et de compter combien se suivent.

L'idée est bien de "reconnaître" un mot avec les moyens du bord. Une personne qui sait choisir un mot de passe dans les règles de l'art obtiendra au final un bon score.

Il est vrai que pour votre exemple le premier aura un score un petit peu moins bon que le deuxième, ce qui ne se justifie pas. Mais adcADC123@# affichera un score mauvais à 6 caractères puis moyen à 9, alors que #aD1dA2Cc3@ affichera un score assez bon dès les 6 premiers caractères. C'est plutôt cohérent il me semble.

Et si je me suis contenté de mettre les correctifs pour IE7 en commentaire au lieu de faire un test sur le navigateur, c'est que trouve embêtant que le code donne un bon score à Hébété1, juste parce que les accents ne sont pas géré...

Cordialement, Ludovic

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Identification [ par MiTcH37 ] bijour,j'aimerais créer un login automatique, alors il me faudrait soit l'ID de l'internaute (s'il ne change pas à chaque connection ?) ou avec un coo Identification [ par bluejim ] blue_jim :Salut à toi!Je recherche un script sympa d'identification à mettre sur mes pages... Tout ceux que j'ai trouvé comportent un inconvénient: s Sécurité [ par veloce76 ] Bonjour, J'aimerai savoir comment sécurisé un fichier fla/swfA l'avance merci. probleme avec petit programme! [ par sabou94 ] Salut à tous! j'ai besoin d'aide!voila je fais un programme pour les cours qui simule les actions d'une banque (depot d'argent, retrait, cheque, etc.. Question sur popu d identification [ par Louis_Le_Dindon ] Bonjour je fais un site perso avec identification, j ai doncun lien sur ma page principale qui dis S'identifier et ki ouvre une pop up avec un formula Problème de sécurité du navigateur [ par abeele2 ] Salutj'ai un frameset avec deux frames pointant sur des noms de domaine different. Sur l'une des frames, j'ai des boutons pour remplir le formulaire d identification avec mise en mémoire [ par animithra ] bonjour &#224; tout le monde !j'ai un probl&#232;me avec un script.j'ai fait sur mon site un formulaire qui permet &#224; mes visiteurs de s'identifie Tester sécurité d'un mot de passe [ par jangomehd ] Bonjour &#224; tous, j'ai vu que sur de plus en plus de site lors d'une inscription, il y a un script qui teste en 'live' la s&#233;curit&#233; de mot problème de sécurité... [ par vxr888 ] Bonjour, J'apprends le javascript et j'essaye de faire un truc qui est peut-être impossible. J'ai essayé en bidouillant de 36 manières différentes mai empecher un achat sur un site si pas d'identification [ par oceane751 ] bonsoir &#224; tous!voil&#224; j'ai cre&#233; un site qui vends des produits informatiquescependant, j'aimerais vraiment empecher une personne non enr


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,593 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.