Codeigniter 3无法访问错误消息

use*_*854 21 php forms validation codeigniter

我在Codeigniter 3中遇到了set_rules函数的问题

我检查用户邮箱:

$this->form_validation->set_rules('email', 'Email', 'required|trim|xss_clean|valid_email');
Run Code Online (Sandbox Code Playgroud)

当我发布时收到此错误:

无法访问与您的字段名称电子邮件对应的错误消息.

Adr*_*nXL 57

来自codeigniter github:

关于XSS清理的一个很大程度上未知的规则是它应该只应用于输出,而不是输入数据.

我们自己的自动和全局XSS清理功能已经犯了这个错误(参见上面关于XSS的上一步),所以现在为了阻止这种做法,我们还从官方支持的表单验证列表中删除'xss_clean'规则.

因为表单验证库通常验证输入数据,所以'xss_clean'规则根本不属于它.

如果你确实需要应用该规则,那么现在还应该加载安全助手,它包含xss_clean()作为常规函数,因此也可以用作验证规则.

链接:https://github.com/bcit-ci/CodeIgniter/blob/develop/user_guide_src/source/installation/upgrade_300.rst#step-13-check-for-usage-of-the-xss_clean-form-validation-规则

如果,尽管如此,你真的需要它,请转到application/config/autoload.php:

$autoload['helper'] = array('security');
Run Code Online (Sandbox Code Playgroud)

或者,在表单验证之前

$this->load->helper('security');
Run Code Online (Sandbox Code Playgroud)

  • 是的,使用$ autoload ['helper'] = array('security'); 工作正常,thx :) (2认同)

小智 12

xss_clean不再是表单验证的一部分.

另一种方法是不使用它,因为xss_clean正在进行清理而不是验证. xss_clean是安全助手的一部分.如果你需要这样做,经过验证后你就可以了.

 $this->load->helper('security'); `
 $value = $this->input->post('email',TRUE); //where TRUE enables the xss filtering
Run Code Online (Sandbox Code Playgroud)

此外,您可以在config.php文件中启用全局xss过滤

$config['global_xss_filtering'] = TRUE;


sea*_*yer 6

其他人已提到它,但没有人简洁地说过,修复此错误的方法是xxs_clean从验证规则中删除.我自己刚刚遇到过这个问题,并且由于这里提供的提示,我能够解决这个问题.

这个:

 $this->form_validation->set_rules('email', 'Email', 'required|trim|xss_clean|valid_email');
Run Code Online (Sandbox Code Playgroud)

变成这样:

 $this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email');
Run Code Online (Sandbox Code Playgroud)


Kam*_*esh 6

security在autoload.php上加载Helper

$autoload['helper'] = array('security');
Run Code Online (Sandbox Code Playgroud)

无需再做任何事情.


Tpo*_*jka 0

全局覆盖规则将通过自定义消息扩展它:

$this->form_validation->set_rules('email', 'Email', 'required|trim|xss_clean|valid_email',
        array('xss_clean' => 'Error Message: your xss is not clean.')
);
Run Code Online (Sandbox Code Playgroud)