LoginSignup
3
2

More than 5 years have passed since last update.

#CakePHP 2.3.9 にてフォームでポスト可能な時間(Security->csrfExpires)を変更したときのメモ

Posted at

背景

  • じっくり考えながら入力するようなフォームで初期値の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.phppublic $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
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2