J'ai un problème avec la fonction set_rules dans Codeigniter 3
je vérifie le courrier électronique de l'utilisateur:
$this->form_validation->set_rules('email', 'Email', 'required|trim|xss_clean|valid_email');
et quand je poste obtenir cette erreur:
Impossible d'accéder à un message d'erreur correspondant à votre nom de champ Email.
Depuis le codeigniter github:
Une règle largement inconnue sur le nettoyage XSS est qu'il ne devrait s'agir que de appliqué à la sortie, par opposition aux données d'entrée.
Nous avons commis cette erreur nous-mêmes avec notre système XSS automatique et global fonction de nettoyage (voir l’étape précédente à propos de XSS ci-dessus), donc maintenant dans un effort pour décourager cette pratique, nous supprimons également 'xss_clean' à partir de la liste des règles de validation de formulaire officiellement prises en charge.
Comme la bibliothèque de validation de formulaire valide généralement les données d'entrée, le fichier La règle 'xss_clean' ne fait tout simplement pas partie de la règle.
Si vous devez vraiment, vraiment appliquer cette règle, vous devriez maintenant aussi chargez Security Helper, qui contient xss_clean () en tant que fonction normale et peut donc également être utilisé en tant que règle de validation.
Et si, malgré tout, vous en avez vraiment besoin, allez à application/config/autoload.php:
$autoload['helper'] = array('security');
Ou, avant la validation de votre formulaire
$this->load->helper('security');
L'alternative consiste à ne pas l'utiliser, car xss_clean effectue la désinfection et non la validation . xss_clean fait partie de Security Helper. Si vous avez besoin de le faire, vous le faites après validation.
$this->load->helper('security'); ` $value = $this->input->post('email',TRUE); //where TRUE enables the xss filtering
De plus, vous pouvez activer le filtrage global xss dans le fichier config.php
$config['global_xss_filtering'] = TRUE;
D'autres y ont fait allusion, mais personne n'a dit succinctement. Pour corriger cette erreur, supprimez xxs_clean
de votre règle de validation. Je viens de découvrir ce problème moi-même et, grâce aux conseils fournis ici, j'ai pu résoudre le problème.
Ce:
$this->form_validation->set_rules('email', 'Email', 'required|trim|xss_clean|valid_email');
Devient ceci:
$this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email');
Veuillez charger security
Helper sur autoload.php
$autoload['helper'] = array('security');
Pas besoin de faire autre chose.
Tu devrais utiliser.
$this->load->helper('security');
Vous pouvez aussi utiliser le code ci-dessous dans config/autoload.php, mais je préfère utiliser celui ci-dessus. Depuis, il garde le poids léger Codeigniter.
$autoload['helper'] = array('security');
Global outrepasser la règle serait la développer avec un message personnalisé de la manière suivante:
$this->form_validation->set_rules('email', 'Email', 'required|trim|xss_clean|valid_email',
array('xss_clean' => 'Error Message: your xss is not clean.')
);