|
Trouver une ressource
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
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
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...
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
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
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|