【问题标题】:Codeigniter CSRF sometimes throwing errorCodeigniter CSRF 有时会抛出错误
【发布时间】:2016-06-01 08:03:02
【问题描述】:

首先,这种情况很少发生。表单本身已成功提交 500 多次。我们收到了大约 3 份报告,其中用户收到 “遇到错误:不允许您请求的操作”

此特定错误可以在安全类 php 代码中找到,并且仅在 csrf 令牌不匹配,或者缺少一个或两个(cookie/post)时才会显示。。 p>

以下是一些相关的配置值:

$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 有时抛出错误?

【问题讨论】:

    标签: codeigniter cookies csrf codeigniter-3 csrf-protection


    【解决方案1】:

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

    【讨论】:

    • 他们可以提交两次表格。但他们必须要快。页面延迟非常低,我们会检查重复项。除此之外,$config['csrf_regenerate'] = FALSE; 应该防止重新生成 csrf 令牌。
    猜你喜欢
    • 1970-01-01
    • 2012-05-03
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    相关资源
    最近更新 更多