Laravel 安全:CSRF Token 过期时间
问题
Laravel 会对所有的 POST 数据默认开启 CSRF 防护,实现的机制是检测 POST 数据里的 _token
信息。
问题是:CSRF _token
的过期时间是多久?
回答
会在每一次 Session 创建时重新生成,也就是说,跟会话的时间一致,Laravel 默认为 120 分钟,可以通过修改
config/session.php
文件里的lifetime
修改。
来源
请查看: Illuminate/Session/Store 源码
<?php
.
.
.
class Store implements Session
{
.
.
.
/**
* 开始会话
*
* @return bool
*/
public function start()
{
$this->loadSession();
if (! $this->has('_token')) {
$this->regenerateToken();
}
return $this->started = true;
}
.
.
.
/**
* 重新生成 CSRF token
*
* @return void
*/
public function regenerateToken()
{
$this->put('_token', Str::random(40));
}
.
.
.
注意
config/session.php
配置的 lifetime
选项不应配置过高的值。
因 Laravel 默认会给所有访问建立会话,设置过长时间,例如说两年,两年内所有用户访问,包括未登录的游客,都会产生会话数据。如果刚好你的网站有不小的流量,很快系统资源就会被消耗完。