Codeigniter CSRF 有时会抛出错误

Codeigniter CSRF sometimes throwing error

首先,这种很少发生。表单本身已成功提交 500 多次。我们收到了大约 3 份报告,其中用户获得 "An Error was encountered: The action you have requested is not allowed".

此特定错误可在安全 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;

如前所述,在几乎所有情况下,用户提交表单都没有问题。当用户确实遇到问题时,我尝试通过自己提交表单来复制错误,使用 相同的输入值相同的 browser/os(启用 cookie 和 javascript,没有浏览器插件)。但是我无法模拟错误。

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

您是否允许用户提交两次表单(第一次提交后您没有添加表单拦截器,因此在处理第一次请求时,用户可以再次提交具有相同 CSRF 值的表单)?如果是这样,当用户两次提交表单时,第一个请求调用 CSRF 重新生成 csrf-value,第二个请求您的用户发送,发送旧的 CSRF 值,结果您收到此错误。