背景
- じっくり考えながら入力するようなフォームで初期値の30分では足らず、投稿できないという現象がしばしば発生したため、30分より長い時間を許容したいということから。
- CakePHP のバージョンは 2.3.9
Security->csrfExpires とは?
- CSRF token が作成されてからの有効期限。
(CSRF protectionが有効な時フォーム系で画面を開いてからポストするまでの有効期限。) - フォーム画面を開いてからポストする時にこの時間を超えると
blackHole()
が呼ばれる模様。 - 公式ドキュメント
http://book.cakephp.org/2.0/en/core-libraries/components/security-component.html
※2系は英語版のみの模様。
初期値は30分
- CakePHP 2.3.9においては
lib/Cake/Controller/Component/SecurityComponent.php
にpublic $csrfExpires = '+30 minutes';
と設定してある様子。
変更するには Controller で値を上書き
- 方法1: Controller の
$components
に記載する方法。 Controller 全体で変更したいときなど。
CakePHP
public $components = array(
'Security' => array(
'csrfExpires' => '+1 hour'
)
);
- 方法2: Controller の
beforeFilter()
に記載する方法。 特定のactionでのみ変更したいときなど。
CakePHP
public function beforeFilter() {
parent::beforeFilter();
$this->Security->csrfExpires = '+1 hour';
}
変更する際の注意点
- CakePHP 2.3.9においては
lib/Cake/Controller/Component/SecurityComponent.php
の$token['csrfTokens'][$authKey] = strtotime($this->csrfExpires);
にてstrtotime()
の引数に直接csrfExpiresの値を渡している様子。
有効期限を1時間にしたいなら'+1 hour'
、40分にしたいなら'+40 minutes'
とする必要がある。
初期値の30分から±するという意味ではない。過去の日時になる'-1 minute'
などにすると直ちに有効期限が切れる。
http://book.cakephp.org/2.0/en/core-libraries/components/security-component.html#SecurityComponent::$csrfExpires