2016-02-19 73 views
0

首先,这个很少发生。表单本身已成功提交500次以上。我们收到了大约3份报告,其中用户收到“遇到错误:您请求的操作不被允许”Codeigniter CSRF有时会引发错误

这个特定的错误可以在Security Class php代码中找到,并且仅当csrf标记不行,或者如果一个或两个(cookie/post)缺失时才会显示此特定错误。

这里有一些相关的配置值:

$config['cookie_prefix'] = 'prefix_'; 
$config['cookie_domain'] = ''; 
$config['cookie_path'] = '/'; 
$config['cookie_secure'] = FALSE; 
$config['cookie_httponly'] = FALSE; 
$config['csrf_protection'] = TRUE; 
$config['csrf_token_name'] = 'csrf'; 
$config['csrf_cookie_name'] = 'csrf'; 
$config['csrf_expire'] = 86400; 
$config['csrf_regenerate'] = FALSE; 

至于说,在几乎所有情况下,用户都没有问题提交表单。当用户确实遇到问题时,我尝试通过使用相同的输入值完全相同的浏览器/操作系统(启用了cookie和javascript,没有浏览器插件)提交表单来复制错误。但我无法模拟错误。

什么可能导致Codeigniter有时会抛出错误?

回答

0

是否允许用户提交表单两次(第一次提交后没有添加表单阻止程序,所以在第一次请求处理时,用户可以再次使用相同的CSRF值提交此表单)?如果是这样,当用户提交表单两次时,第一个请求调用CSRF重新生成csrf-value,第二个请求用户发送,发送旧的CSRF值,因此出现此错误。

+0

他们可以提交表单两次。但他们必须快速。页面延迟非常低,我们会检查重复项。除此之外,'$ config ['csrf_regenerate'] = FALSE;'应该防止再生csrf标记。 – Diederik