CSRF 保护代码点火器生成随机令牌


CSRF Protection Codeigniter generating Random token

我正在使用代码点火器,我已经在配置中启用了csrf.php如下所示。

    $config['csrf_protection']   =  TRUE;
    $config['csrf_token_name']   =  'csrf_token';
    $config['csrf_cookie_name']  =  'csrf_cookie';
    $config['csrf_expire']       =  7200;
    $config['csrf_regenerate']       =  TRUE;

然后为了避免错误"遇到错误。您请求的操作是不允许的。我已将以下代码添加到 Web 视图中的每个窗体中。

<input type="hidden" name="<?php echo $this->security->get_csrf_token_name(); ?>" value="<?php echo $this->security->get_csrf_hash(); ?>">

此代码生成一个令牌,错误已清除。但是由于<?php echo $this->security->get_csrf_hash(); ?>,每个页面的令牌都是相同的。

当我按查看源代码时,网页中的令牌清晰可见。

我想知道这种方法可以防止csrf吗?或者我必须生成一个随机令牌?或者通过编码点火器预防CSRF的最佳方法是什么。

令牌是随机的。但是,Codeigniter 将使用相同的令牌值,直到 CSRF cookie 过期,或者,如果$config['csrf_regenerate'] = TRUE;,它将在每个 POST 请求上创建一个新的令牌值。

GET请求(即导航到站点上的其他页面)不会生成新的令牌。

尝试form_open('controller/method'); for html form。

这将自动创建隐藏类型的随机csrf令牌,而无需手动操作。