請問防csrf時,yii生成的token有時效性嗎?
同一個頁面反復刷新,\YII::$app->request->csrfToken; 頁面中這個值是一直變化的。
但是同一個頁面里反復發送ajax的post請求,用著同一個token卻一直可以通過。
甚至一個可通過的token在之后的請求中反復使用,依然可以通過。
這個頁面生成的token在其他頁面依然可用,那又為什么要每個頁面都要生成新的token呢?
同一個頁面反復刷新,\YII::$app->request->csrfToken; 頁面中這個值是一直變化的。
但是同一個頁面里反復發送ajax的post請求,用著同一個token卻一直可以通過。
甚至一個可通過的token在之后的請求中反復使用,依然可以通過。
這個頁面生成的token在其他頁面依然可用,那又為什么要每個頁面都要生成新的token呢?
2017-03-03
舉報
2017-04-15
因為你拿到這個頁面的數據,是通過后臺一系列驗證的,
2017-03-05
????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; ????}