打开YII_CSRF_TOKEN安全标志

时间:2014-07-10 21:24:38

标签: php cookies yii

我在Yii中启用了CSRF验证:

'enableCsrfValidation' => true,

所有内容都按预期工作,但我希望会话Cookie启用secure标记。

使用其他cookie,您可以在配置中设置安全标志:

'session'=>array(
    'cookieParams' => array(
        'httponly'=>true,
        'secure' => true,
    ),
),

您如何为YII_CSRF_TOKEN

执行此操作

2 个答案:

答案 0 :(得分:3)

将以下内容添加到您的配置中:

'components' => array(
    'request' => array(
        'csrfCookie'=>array(
            'httpOnly'=>true,
        ),
    ),
),

答案 1 :(得分:2)

您无法使用内置的CHttpRequest组件执行此操作。您需要从中派生并覆盖createCsrfCookie()以创建安全cookie,如下所示:

class CustomHttpRequest extends CHttpRequest {

    protected function createCsrfCookie()
    {
        $cookie=new CHttpCookie($this->csrfTokenName,sha1(uniqid(mt_rand(),true)));
        $cookie->secure = true; //Here is where you make your cookie secure
        if(is_array($this->csrfCookie))
        {
            foreach($this->csrfCookie as $name=>$value)
                $cookie->$name=$value;
        }
        return $cookie;
    }

}

在组件配置中,指定自定义实现:

'components'=>array(
        ....,
        'request' => array(
            'class' => 'CustomHttpRequest',
            'enableCsrfValidation' => true,
        ),

重要信息:要生成新的CSRF令牌,您需要启动新的浏览器会话。此外,您需要使用HTTPS才能使安全cookie生效。

删除开发URI的所有Cookie,或启动私人会话(在Chrome或Firefox中)以开始新会话。