我在Yii中启用了CSRF验证:
'enableCsrfValidation' => true,
所有内容都按预期工作,但我希望会话Cookie启用secure
标记。
使用其他cookie,您可以在配置中设置安全标志:
'session'=>array(
'cookieParams' => array(
'httponly'=>true,
'secure' => true,
),
),
您如何为YII_CSRF_TOKEN
?
答案 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中)以开始新会话。