Accueil > > > ESTIMATION DU DEGRÉ DE CONFIANCE À ACCORDER À UN MOT DE PASSE (OU NIVEAU DE SÉCURITÉ)
ESTIMATION DU DEGRÉ DE CONFIANCE À ACCORDER À UN MOT DE PASSE (OU NIVEAU DE SÉCURITÉ)
Information sur la source
Description
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
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...
Sources du même auteur
Sources de la même categorie
Commentaires et avis
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 à tout le monde !j'ai un problème avec un script.j'ai fait sur mon site un formulaire qui permet à mes visiteurs de s'identifie
Tester sécurité d'un mot de passe [ par jangomehd ]
Bonjour à 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écurité 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 à tous!voilà j'ai creé un site qui vends des produits informatiquescependant, j'aimerais vraiment empecher une personne non enr
|
Derniers Blogs
DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Je m'y prends un peu tard je sais, mais bon je suis développeur web et donc hyper fainéant ! Toujours dans le cadre des technologies émergentes, ici HTML5, parce qu'on aime HTML5 chez Wyg , nous seront présent, le vieux ( Aurélien V.) et moi, pour pr...
Cliquez pour lire la suite de l'article par Gio
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|