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)
小智 12
另一种方法是不使用它,因为xss_clean正在进行清理而不是验证. xss_clean是安全助手的一部分.如果你需要这样做,经过验证后你就可以了.
Run Code Online (Sandbox Code Playgroud)$this->load->helper('security'); ` $value = $this->input->post('email',TRUE); //where TRUE enables the xss filtering
此外,您可以在config.php文件中启用全局xss过滤
$config['global_xss_filtering'] = TRUE;
其他人已提到它,但没有人简洁地说过,修复此错误的方法是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)
请security在autoload.php上加载Helper
$autoload['helper'] = array('security');
Run Code Online (Sandbox Code Playgroud)
无需再做任何事情.
全局覆盖规则将通过自定义消息扩展它:
$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)