激活CSRF保护时出错

时间:2017-01-21 15:13:07

标签: php codeigniter codeigniter-3

我设置$config['csrf_protection'] = TRUE;时收到以下错误消息:

  

致命错误:Class' CI_Controller'在第369行的/opt/codeigniter/system/core/CodeIgniter.php中找不到   遇到PHP错误严重性:错误消息:Class' CI_Controller'找不到文件名:core / CodeIgniter.php行号:369 Backtrace:

我跟随manual,但我看不清楚原因。

顺便说一下,只有当我尝试(通过 F5 )重新加载用POST提交的FORM时,才会发生这种情况。我知道会出现错误,但我认为它应该显示在错误页面(或其他内容)中,并且可能是另一种错误。

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

我的问题是我修改了 views / errors / error_general.php 来动态化从CI实例获取变量的报告响应,然后,某种程度上,CSRF保护的错误响应变得配置错误。

显然,此文件无法查看CI实例,因此无法在其中使用实例引用。

通过将文件 views / errors / error_general.php 返回到原始版本来解决此问题,但我仍在研究如何自定义它。

感谢您的关注。

答案 1 :(得分:0)

确保您已正确命名文件和类名https://www.codeigniter.com/user_guide/general/styleguide.html#file-naming

https://www.codeigniter.com/user_guide/general/styleguide.html#class-and-method-naming

对于CSRF

我发现,一旦完成域名,就可以为项目创建一个vHost

example.com

的config.php

$config['cookie_prefix']    = 'ci_';
$config['cookie_domain']    = '.example.com';
$config['cookie_path']      = '/';
$config['cookie_secure']    = FALSE;
$config['cookie_httponly']  = FALSE;


$config['csrf_protection'] = TRUE;
$config['csrf_token_name'] = 'csrf_test_name';
$config['csrf_cookie_name'] = 'csrf_cookie_name';
$config['csrf_expire'] = 7200;
$config['csrf_regenerate'] = TRUE;
$config['csrf_exclude_uris'] = array();

并使用表单助手functions为我修复了它。