1.Problématique▲
Lorsque l'on propose un espace membre sur son site, la moindre des choses est d'assurer la sécurité des données de chacun.
A une époque où l'utilisation d'un mot de passe de connexion est largement répandue, il est nécessaire d'exiger un mot de passe dit 'solide' pour
notamment pallier aux différentes techniques de piratages, le BruteForce par exemple, et ainsi d'éviter tous désagréments ayant pour cause un mot de passe trop simpliste...
Niveau sécurité, le risque zero n'existe pas. Cet article a seulement pour but de fournir un bouclier de plus face aux menaçes permanentes.
FAQ Sécurité PHP
2.Enjeux et choix techniques▲
L'enjeu majeur d'un système de vérification de la complexité d'un mot de passe est d'assurer un maximum de sécurité au niveau du choix fait par l'utilisateur.
Nous allons donc créer une fonction qui va nous renvoyer un indice de 'solidité', lequel nous permettra de juger, après comparaison, si le mot de passe est valable...
- La fonction strlen() pour calculer la longueur d'une chaîne.
- Récupération du mot de passe passé en paramètre.
- Calcul de l'indice de solidité.
- La fonction retourne un entier numérique.
La procédure de calcul de l'indice se déroule en plusieurs étapes, tout d'abord on découpe le mot de passe de façon à lire tous les caractères un par un (à l'aide de la structure for).
Chaque lettre minuscule rapporte 1 point, une lettre majuscule rapporte 2 points, 3 points pour les chiffres et 5 points pour les caractères autres.
De plus pour chaque type de caractères présents au moins une fois on ajoute des points de diversités. Enfin, le nombre de point est multiplié par le nombre
de points de diversité, cela nous donne le nombre de points de complexité. Il ne nous reste plus qu'à comparer ce nombre au nombre minimum requis.
3.Code▲
Les codes présentés ci-dessous sont à titre d'exemples. Pour éviter toute erreur, ils ne doivent pas être Copiés/Collés. À vous d'adapter les exemples à votre situation...
<?php
function
testpassword($mdp
) {
// $mdp le mot de passe passé en paramètre
// On récupère la longueur du mot de passe
$longueur
=
strlen($mdp
);
// On fait une boucle pour lire chaque lettre
for
($i
=
0
;
$i
<
$longueur
;
$i
++
) {
// On sélectionne une à une chaque lettre
// $i étant à 0 lors du premier passage de la boucle
$lettre
=
$mdp
[
$i
];
if
($lettre
>=
'a'
&&
$lettre
<=
'z'
){
// On ajoute 1 point pour une minuscule
$point
=
$point
+
1
;
// On rajoute le bonus pour une minuscule
$point_min
=
1
;
}
else
if
($lettre
>=
'A'
&&
$lettre
<=
'Z'
){
// On ajoute 2 points pour une majuscule
$point
=
$point
+
2
;
// On rajoute le bonus pour une majuscule
$point_maj
=
2
;
}
else
if
($lettre
>=
'0'
&&
$lettre
<=
'9'
){
// On ajoute 3 points pour un chiffre
$point
=
$point
+
3
;
// On rajoute le bonus pour un chiffre
$point_chiffre
=
3
;
}
else
{
// On ajoute 5 points pour un caractère autre
$point
=
$point
+
5
;
// On rajoute le bonus pour un caractère autre
$point_caracteres
=
5
;
}
}
// Calcul du coefficient points/longueur
$etape1
=
$point
/
$longueur
;
// Calcul du coefficient de la diversité des types de caractères...
$etape2
=
$point_min
+
$point_maj
+
$point_chiffre
+
$point_caracteres
;
// Multiplication du coefficient de diversité avec celui de la longueur
$resultat
=
$etape1
*
$etape2
;
// Multiplication du résultat par la longueur de la chaîne
$final
=
$resultat
*
$longueur
;
return
$final
;
}
Exemple d'utilisation de la fonction avec le mot de passe : mathieu7
$mdp
=
"
mathieu7
"
;
$indice
=
testpassword($mdp
);
echo $indice
;
// Retourne un indice de 40
Exemple d'utilisation de la fonction avec le mot de passe : MaThIeU7
$mdp
=
"
MaThIeU7
"
;
$indice
=
testpassword($mdp
);
echo $indice
;
// Retourne un indice de 84
Exemple d'utilisation de la fonction avec le mot de passe : MaTh!eU7
$mdp
=
"
MaTh!eU7
"
;
$indice
=
testpassword($mdp
);
echo $indice
;
// Retourne un indice de 187
Grâce à ces exemples on peut imaginer un mot de passe de complexité moyenne ayant pour valeur un indice d'environ 100.
A vous de juger et de définir un indice minimum requis en fonction de vos besoins.
Maintenant il ne vous reste plus qu'à utiliser cette fonction lors de la vérification des données d'inscriptions d'un membre par exemple,
de faire une comparaison avec l'indice minimum, dont vous aurez défini la valeur, et de confirmer ou non la validité du mot de passe.
4.Conclusion▲
Cet article touche à sa fin, sachez que les exemples de codes sont à titre d'exemples et ne peuvent fonctionner par un simple Copier/Coller.
À vous de les adapter en fonction de vos besoins...
Cet exemple de contrôle des données est une manière simple et compréhensible de faire, ce n'est pas une finalité en soi mais seulement une mesure supplementaire dans la sécurisation des données...
Expressions régulières en PHP (Regex, un autre moyen de contrôle des données)
5.Remerciements▲
Merci à Yogui pour les corrections apportées à l'article.