Codeigniter 3 无法访问错误消息

Posted

技术标签:

【中文标题】Codeigniter 3 无法访问错误消息【英文标题】:Codeigniter 3 Unable to access an error message 【发布时间】:2015-04-18 14:00:50 【问题描述】:

我在 Codeigniter 3 中使用 set_rules 函数存在问题

我检查用户电子邮件:

$this->form_validation->set_rules('email', 'Email', 'required|trim|xss_clean|valid_email');

当我发布时收到此错误:

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

【问题讨论】:

您是否更改了默认语言?您的输入名称是“电子邮件”吗? 这是我的输入名称“电子邮件”,不,我不更改默认语言 检查文件系统/语言/english/form_validation_lang.php是否存在 是的,但如果我删除这个 xss_clean 工作正常 您是否从 CI2 迁移了您的应用程序? 【参考方案1】:

来自codeigniter github:

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

我们自己在使用自动和全局 XSS 时犯了这个错误 清理功能(参见上面关于 XSS 的上一步),所以现在在 努力阻止这种做法,我们还删除了“xss_clean” 来自官方支持的表单验证规则列表

由于表单验证库通常验证输入数据,因此 'xss_clean' 规则根本不属于它。

如果你真的、真的需要应用这条规则,你现在也应该 加载 Security Helper,其中包含 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-rule

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

$autoload['helper'] = array('security');

或者,在您的表单验证之前

$this->load->helper('security');

【讨论】:

是的,$autoload['helper'] = array('security');工作正常,谢谢:) 使用 autoload.php 加载安全助手。最好使用这个助手来制作一个安全的应用程序。【参考方案2】:

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

替代方法是不使用它,因为 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;

【讨论】:

【参考方案3】:

其他人已经提到它,但没有人简洁地说,修复此错误的方法是从您的验证规则中删除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');

【讨论】:

【参考方案4】:

请在 autoload.php 上加载 security Helper

$autoload['helper'] = array('security');

无需再做任何事情。

【讨论】:

【参考方案5】:

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

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

【讨论】:

你的回答有一点错别字:$this->form_validation->set_rules('email', 'Email', 'required|trim|xss_clean|valid_email', array('xss_clean' => 'Error Message: your xss is not clean.') ); @SebastianPalma 谢谢,已修复。【参考方案6】:

你应该使用。

$this->load->helper('security'); 

您也可以在 config/autoload.php 中使用以下代码,但我更喜欢使用上面的代码。因为,它保持了 Codeigniter 的轻量级。

$autoload['helper'] = array('security');

【讨论】:

以上是关于Codeigniter 3 无法访问错误消息的主要内容,如果未能解决你的问题,请参考以下文章

无法在Codeigniter中发送电子邮件,没有错误消息。本地或远程

无法在 Codeigniter 中使用包含函数文件

无法访问 CodeIgniter 资产文件夹中的 CSS 文件,显示 404 错误

codeigniter 无法加载库

Codeigniter 4:无法使用apache mode_rewrite访问页面

无法访问codeigniter控制器中的uri段