mirror of
https://gitlab.easter-eggs.com/ee/ldapsaisie.git
synced 2024-12-25 01:43:55 +01:00
LSformRule_zxcvbn: add minGuessesLog10, banPersonalInfo & banDictionaries parameters
This commit is contained in:
parent
fee03668f5
commit
b7a68f6a9e
2 changed files with 63 additions and 5 deletions
|
@ -13,8 +13,15 @@ guider dans le choix d'un mot de passe sûre.
|
|||
|
||||
- `minScore`
|
||||
|
||||
Le score minimal pour que le mot de passe soit accepté. Il doit s'agir d'un entier cimpris entre 0
|
||||
(le plus faible) et 4 (le plus sécurisé). Paramètre facultatif valant 4 par défaut.
|
||||
Le score minimal pour que le mot de passe soit accepté. Il doit s'agir d'un entier compris entre
|
||||
0 (le plus faible) et 4 (le plus sécurisé). Paramètre facultatif valant 4 par défaut.
|
||||
|
||||
- `minGuessesLog10`
|
||||
|
||||
Permet de définir le logarithme en base 10 du nombre minimum estimé de tentative pour deviner le
|
||||
mot de passe. Par exemple, si `minGuessesLog10` est égal à 6, cela signifie que le mot de passe
|
||||
ne sera accepté que si `Zxcvbn` estime qu'il faut au moins 1 million (10^6) de tentatives pour le
|
||||
deviner. Paramètre facultatif valant 10 par défaut.
|
||||
|
||||
- `userDataAttrs`
|
||||
|
||||
|
@ -24,6 +31,11 @@ guider dans le choix d'un mot de passe sûre.
|
|||
le protège que peut des attaques ciblées. Paramètre facultatif, mais il est fortement conseillé de
|
||||
renseigner un maximum d'attributs contenant des informations personnelles relatives à l'utilisteur.
|
||||
|
||||
- `banPersonalInfo`
|
||||
|
||||
Booléen permettant d'interdire toutes utilisations d'informations personnelles dans le choix du mot
|
||||
de passe. Paramètre facultatif et vrai par défaut.
|
||||
|
||||
- `showWarning`
|
||||
|
||||
Booléen définissant si les messages d'alertes retournés par la librairie `Zxcvbn` doivent être
|
||||
|
@ -52,6 +64,29 @@ guider dans le choix d'un mot de passe sûre.
|
|||
}
|
||||
```
|
||||
|
||||
- `banDictionaries`
|
||||
|
||||
Ce paramètre permet d'interdire tous mots issues de certains dictionnaires. Il s'agit d'un
|
||||
tableau devant contenir les noms des dictionaires interdits. La librairie `Zxcvbn` fournis
|
||||
les dictionnaires suivant :
|
||||
|
||||
- `us_tv_and_film` : les mots les plus courrament utilisés dans les séries et films américains
|
||||
- `passwords` : les mot de passse les plus courrament utilisés
|
||||
- `male_names` : les prénoms masculins les plus courrant
|
||||
- `female_names` : les prénoms féminins les plus courrant
|
||||
- `surnames` : les nom de familles les plus courrant aux États Unis
|
||||
- `english_wikipedia` : les mots les plus courrament utilisés dans les articles en anglais de
|
||||
Wikipédia
|
||||
- `french_wikipedia` : les mots les plus courrament utilisés dans les articles en français de
|
||||
Wikipédia
|
||||
- `user_inputs` : les informations personnelles fournis lors de la validation du mot de passe
|
||||
|
||||
__Note :__ lister ce dictionnaire dans se paramètre à le même effet que le paramètre
|
||||
`banPersonalInfo` documenté ci-dessus.
|
||||
|
||||
Vous pouvez également lister ici tout dictionnaires personnalisés que vous auriez ajouté grâce
|
||||
au paramètre `customDictionaries`.
|
||||
|
||||
- `zxcvbn_autoload_path`
|
||||
|
||||
Le chemin vers le fichier de chargement automatique des classes de la librairie *ZxcvbnPhp*. Ce
|
||||
|
|
|
@ -30,7 +30,10 @@ class LSformRule_zxcvbn extends LSformRule {
|
|||
// CLI parameters autocompleters
|
||||
protected static $cli_params_autocompleters = array(
|
||||
'minScore' => array('LScli', 'autocomplete_int'),
|
||||
'minGuessesLog10' => array('LScli', 'autocomplete_int'),
|
||||
'userDataAttrs' => null,
|
||||
'banPersonalInfo' => array('LScli', 'autocomplete_bool'),
|
||||
'banDictionaries' => null,
|
||||
'showWarning' => array('LScli', 'autocomplete_bool'),
|
||||
'showSuggestions' => array('LScli', 'autocomplete_bool'),
|
||||
'customDictionaries' => null,
|
||||
|
@ -82,14 +85,32 @@ class LSformRule_zxcvbn extends LSformRule {
|
|||
}
|
||||
self :: log_trace("User data: ".varDump($userData));
|
||||
$result = $zxcvbn->passwordStrength($value, $userData);
|
||||
self :: log_trace("Zxcvbn result: ".varDump($result));
|
||||
self :: log_debug("Zxcvbn result: ".varDump($result));
|
||||
self :: log_debug("Zxcvbn score: ".$result['score']);
|
||||
self :: log_debug("Zxcvbn guesses log10: ".$result['guesses_log10']);
|
||||
|
||||
$minScore = LSconfig :: get('params.minScore', 4, 'int', $options);
|
||||
if($result['score'] >= $minScore) {
|
||||
return True;
|
||||
$minGuessesLog10 = LSconfig :: get('params.minGuessesLog10', 10, 'int', $options);
|
||||
$banDictionaries = LSconfig :: get('params.banDictionaries', [], 'array', $options);
|
||||
if (LSconfig :: get('params.banPersonalInfo', true, 'bool', $options))
|
||||
$banDictionaries[] = "user_inputs";
|
||||
|
||||
$banned_tokens = [];
|
||||
if ($banDictionaries) {
|
||||
foreach($result["sequence"] as $match) {
|
||||
if ($match->pattern == "dictionary" && in_array($match->dictionaryName, $banDictionaries))
|
||||
$banned_tokens[] = $match->token;
|
||||
}
|
||||
self :: log_debug("Zxcvbn banned token(s) found: '".implode("', '", $banned_tokens)."'");
|
||||
}
|
||||
|
||||
if(
|
||||
$result['score'] >= $minScore
|
||||
&& $result['guesses_log10'] >= $minGuessesLog10
|
||||
&& !$banned_tokens
|
||||
)
|
||||
return True;
|
||||
|
||||
$errors = array();
|
||||
if (
|
||||
$result['feedback']['warning'] &&
|
||||
|
@ -97,6 +118,8 @@ class LSformRule_zxcvbn extends LSformRule {
|
|||
) {
|
||||
$errors[] = $result['feedback']['warning'];
|
||||
}
|
||||
if ($banned_tokens)
|
||||
$errors[] = _("Banned token found in this password.");
|
||||
if (!$errors)
|
||||
$errors[] = _('The security of this password is too weak.');
|
||||
|
||||
|
|
Loading…
Reference in a new issue