2017-03-11 5 views
0

J'essaie d'imposer des mots de passe forts (er) dans mon application Kohana en utilisant Auth, en utilisant l'expression rationnelle suivante pour exiger au moins une lettre majuscule, une minuscule, un chiffre, un non alphanum (caractère spécial), et un minimum de 8 caractères.Imposer des mots de passe forts dans Kohana Auth

^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[^A-Za-z0-9]).{8,}$ 

Le regex travaille, comme on peut le voir sur Rubular. Voici le code que j'utilise dans le Model_Auth_User de Kohana, qui s'étend sur ORM.

public function rules() { 
    return array(
     'password' => array(
      array('not_empty'), 
      array('min_length', array(':value', 8)), 
      array('regex', array(':value', '/^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[^A-Za-z0-9]).{8,}$/')) 
     ) 
    ); 
} 

Cependant, lors de la création d'un nouveau compte utilisateur, ou modifier le mot de passe d'un existant, ce regex semble être complètement ignoré. Le min_length de la ligne ci-dessus fonctionne bien cependant!

Il m'empêchera d'utiliser test comme mot de passe car il contient moins de 8 caractères, mais testing123 ne donne aucun type de message d'erreur.

Des idées pour lesquelles cela se passe et un moyen de contourner le problème?

+0

Vous stockez le mot de passe comme hash? Si je me souviens bien, les règles ORM s'appliquent aux valeurs de la base de données, pas aux valeurs REQUEST. – bato3

+0

@ bato3 Oui, le mot de passe est hashé. La validation du mot de passe est exécutée sur les valeurs POST avant le cryptage. – SigmaSteve

+0

Je le sais. J'essaie d'expliquer pourquoi le code up ne fonctionne pas. 'save' sans validation supplémentaire, utilisez des valeurs internes, et ceci a été haché sur la méthode' set'. Vous devez donc utiliser des valeurs initiales initialisées de validation supplémentaire (POST). https://kohanaframework.org/3.3/guide-api/Model_Auth_User#filters, [#set] (https://kohanaframework.org/3.3/guide-api/Model_Auth_User#save), [#create] (https://kohanaframework.org/3.3/guide-api/Model_Auth_User#create) – bato3

Répondre

1

Compris - vous devez ajouter l'expression régulière à la fonction get_password_validation (dans le même modèle) ou il ne sort aucun message d'erreur.

public static function get_password_validation($values) { 
    return Validation::factory($values) 
     ->rule('password', 'min_length', array(':value', 8)) 
     ->rule('password', 'regex', array(':value', '/^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[^A-Za-z0-9]).{8,}$/')) 
     ->rule('password_confirm', 'matches', array(':validation', ':field', 'password')); 
} 

Si elles sont ajoutées, l'expression rationnelle dans la fonction rules() doit être supprimé ou il est impossible de se connecter comme il court le contrôle de regex sur la corde hachée, qui ne contient pas de caractères spéciaux.

Espérons que cela aide quelqu'un.