Laravel 安全:CSRF Token 过期时间 0 个改进

问题

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 默认会给所有访问建立会话,设置过长时间,例如说两年,两年内所有用户访问,包括未登录的游客,都会产生会话数据。如果刚好你的网站有不小的流量,很快系统资源就会被消耗完。

本文为 Wiki 文章,邀您参与纠错、纰漏和优化
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!