CSRF保护Codeigniter生成随机令牌

时间:2016-01-20 05:13:47

标签: php codeigniter csrf-protection

我正在使用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(); ?>">

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

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

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

2 个答案:

答案 0 :(得分:1)

为html表单试用form_open('controller/method');

这将自动创建隐藏类型的随机csrf标记,无需手动执行。

答案 1 :(得分:1)

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

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