【问题标题】:CSRF Protection Codeigniter generating Random tokenCSRF 保护 Codeigniter 生成随机令牌
【发布时间】:2025-11-23 01:15:02
【问题描述】:

我正在使用 codeigniter,并且我在 config.php 中启用了 csrf,如下所示。

    $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(); ?>">

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

当我通过查看源代码查看源代码时,网页令牌清晰可见。

我想知道这种方法是否可以防止csrf?或者我必须生成一个随机令牌?或者通过codeigniter防止csrf的最佳方法是什么。

【问题讨论】:

    标签: php codeigniter csrf-protection


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      尝试form_open('controller/method'); 获取 html 表单。

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

      【讨论】: