我在Codeigniter 3中遇到了set_rules函数的问题
我检查用户电子邮件:
$this->form_validation->set_rules('email', 'Email', 'required|trim|xss_clean|valid_email');
当我发帖时收到此错误:
无法访问与您的字段名称Email相对应的错误消息。
答案 0 :(得分:56)
来自codeigniter github:
关于XSS清洁的一个很大程度上未知的规则是它应该只是 应用于输出,而不是输入数据。
我们自己用自动和全局XSS弄错了 清洁功能(参见上面关于XSS的上一步),所以现在在 努力阻止这种做法,我们也在删除'xss_clean' 来自官方支持的表单验证规则列表。
因为表单验证库通常验证输入数据,所以 'xss_clean'规则根本不属于它。
如果你真的,真的需要应用这条规则,你现在也应该 加载安全帮助程序,其中包含xss_clean()作为常规函数,因此也可以用作验证规则。
如果,尽管如此,你真的需要它,请转到application / config / autoload.php:
$autoload['helper'] = array('security');
或者,在表单验证之前
$this->load->helper('security');
答案 1 :(得分:12)
替代方法是不使用它,因为 xss_clean 正在进行清理而不是验证。 xss_clean 是安全帮助程序的一部分。如果您需要这样做,请在验证后完成。
$this->load->helper('security'); ` $value = $this->input->post('email',TRUE); //where TRUE enables the xss filtering
此外,您可以在config.php文件中启用全局xss过滤
$config['global_xss_filtering'] = TRUE;
答案 2 :(得分:5)
其他人已提到它,但没有人简洁地说过,修复此错误的方法是从验证规则中删除xxs_clean
。我自己刚刚遇到过这个问题,并且由于这里提供的提示,能够解决这个问题。
此:
$this->form_validation->set_rules('email', 'Email', 'required|trim|xss_clean|valid_email');
成为这个:
$this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email');
答案 3 :(得分:5)
请在autoload.php上加载security
帮助
$autoload['helper'] = array('security');
无需再做任何事情。
答案 4 :(得分:0)
全局覆盖规则将使用自定义消息进行扩展:
$this->form_validation->set_rules('email', 'Email', 'required|trim|xss_clean|valid_email',
array('xss_clean' => 'Error Message: your xss is not clean.')
);
答案 5 :(得分:0)
你应该使用。
$this->load->helper('security');
你也可以在config / autoload.php中使用下面的代码,但我更喜欢使用上面的代码。因为它保持了Codeigniter轻量级。
$autoload['helper'] = array('security');