为了账号安全,请及时绑定邮箱和手机立即绑定

请问防csrf时,yii生成的token有时效性吗?

同一个页面反复刷新,\YII::$app->request->csrfToken; 页面中这个值是一直变化的。

但是同一个页面里反复发送ajax的post请求,用着同一个token却一直可以通过。

甚至一个可通过的token在之后的请求中反复使用,依然可以通过。

这个页面生成的token在其他页面依然可用,那又为什么要每个页面都要生成新的token呢?

正在回答

2 回答

因为你拿到這个页面的数据,是通过后台一系列验证的,

0 回复 有任何疑惑可以回复我~
    public function getCsrfToken($regenerate = false)
    {
        if ($this->_csrfToken === null || $regenerate) {
            if ($regenerate || ($token = $this->loadCsrfToken()) === null) {
                $token = $this->generateCsrfToken();
            }
            // the mask doesn't need to be very random
            $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-.';
            $mask = substr(str_shuffle(str_repeat($chars, 5)), 0, static::CSRF_MASK_LENGTH);
            // The + sign may be decoded as blank space later, which will fail the validation
            $this->_csrfToken = str_replace('+', '.', base64_encode($mask . $this->xorTokens($token, $mask)));
        }

        return $this->_csrfToken;
    }


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Yii框架不得不说的故事—安全篇(3)
  • 参与学习       17591    人
  • 解答问题       32    个

本教程主要讲解Yii对4种流行攻击方式的防范和处理

进入课程

请问防csrf时,yii生成的token有时效性吗?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信