mirror of
https://gitlab.easter-eggs.com/ee/ldapsaisie.git
synced 2024-11-24 10:59:07 +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`
|
- `minScore`
|
||||||
|
|
||||||
Le score minimal pour que le mot de passe soit accepté. Il doit s'agir d'un entier cimpris entre 0
|
Le score minimal pour que le mot de passe soit accepté. Il doit s'agir d'un entier compris entre
|
||||||
(le plus faible) et 4 (le plus sécurisé). Paramètre facultatif valant 4 par défaut.
|
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`
|
- `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
|
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.
|
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`
|
- `showWarning`
|
||||||
|
|
||||||
Booléen définissant si les messages d'alertes retournés par la librairie `Zxcvbn` doivent être
|
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`
|
- `zxcvbn_autoload_path`
|
||||||
|
|
||||||
Le chemin vers le fichier de chargement automatique des classes de la librairie *ZxcvbnPhp*. Ce
|
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
|
// CLI parameters autocompleters
|
||||||
protected static $cli_params_autocompleters = array(
|
protected static $cli_params_autocompleters = array(
|
||||||
'minScore' => array('LScli', 'autocomplete_int'),
|
'minScore' => array('LScli', 'autocomplete_int'),
|
||||||
|
'minGuessesLog10' => array('LScli', 'autocomplete_int'),
|
||||||
'userDataAttrs' => null,
|
'userDataAttrs' => null,
|
||||||
|
'banPersonalInfo' => array('LScli', 'autocomplete_bool'),
|
||||||
|
'banDictionaries' => null,
|
||||||
'showWarning' => array('LScli', 'autocomplete_bool'),
|
'showWarning' => array('LScli', 'autocomplete_bool'),
|
||||||
'showSuggestions' => array('LScli', 'autocomplete_bool'),
|
'showSuggestions' => array('LScli', 'autocomplete_bool'),
|
||||||
'customDictionaries' => null,
|
'customDictionaries' => null,
|
||||||
|
@ -82,13 +85,31 @@ class LSformRule_zxcvbn extends LSformRule {
|
||||||
}
|
}
|
||||||
self :: log_trace("User data: ".varDump($userData));
|
self :: log_trace("User data: ".varDump($userData));
|
||||||
$result = $zxcvbn->passwordStrength($value, $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 score: ".$result['score']);
|
||||||
|
self :: log_debug("Zxcvbn guesses log10: ".$result['guesses_log10']);
|
||||||
|
|
||||||
$minScore = LSconfig :: get('params.minScore', 4, 'int', $options);
|
$minScore = LSconfig :: get('params.minScore', 4, 'int', $options);
|
||||||
if($result['score'] >= $minScore) {
|
$minGuessesLog10 = LSconfig :: get('params.minGuessesLog10', 10, 'int', $options);
|
||||||
return True;
|
$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();
|
$errors = array();
|
||||||
if (
|
if (
|
||||||
|
@ -97,6 +118,8 @@ class LSformRule_zxcvbn extends LSformRule {
|
||||||
) {
|
) {
|
||||||
$errors[] = $result['feedback']['warning'];
|
$errors[] = $result['feedback']['warning'];
|
||||||
}
|
}
|
||||||
|
if ($banned_tokens)
|
||||||
|
$errors[] = _("Banned token found in this password.");
|
||||||
if (!$errors)
|
if (!$errors)
|
||||||
$errors[] = _('The security of this password is too weak.');
|
$errors[] = _('The security of this password is too weak.');
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue