FuelPHPでCSRFのエラー(config.php:security['csrf_expiration'])
CSRFのチェックでエラーになるときもあれば、ならないときもある。
作成日:2019-05-22, 更新日:2019-05-22
経緯
・ログイン機能実装→ログインチェック問題無し
・他の人が使うとログインエラーになる。原因はCSRFのチェックでエラー
原因・対策
・CSRFの有効期限を変更した。
▼「app/config/config.php」
~ 略 ~ 'security' => array( ~ 略 ~ 'csrf_expiration' => 10, // ←「0」以下にするかもっと大きな秒数で指定 ~ 略 ~
※無期限は「0以下」にするっぽい。
調査メモ
エラーになっている箇所の調査
・ログインを拒絶している箇所を探す(メアドの書式が問題なのか、メアド・パスワードの入力ミスが問題なのか・・・等)
調べると・・・「if ( !\Security::check_token() ) { ~ CSRFのチェックエラー ~ }」が問題になっていた。
CSRFのチェックエラー
▼考えられる原因
・CSRFのトークンを渡していない1(「input name=〇〇〇」が存在しない)
・CSRFのトークンを渡していない2(「input name=〇〇〇」の「name」の値が間違っている)
・CSRFのトークンが間違っている1(「input name=〇〇〇」にvalueをセットしていない)
・CSRFのトークンが間違っている2(「input name=〇〇〇」のセットしたvalueが古い or 余計な文字が入っている等)
・セッション切れ
・その他
CSRFのトークンを渡していない・間違っている
・ビューの確認
・「if ( !\Security::check_token() ) { ~ CSRFのチェックエラー ~ }」の処理の前で「\Input::post()」で受取った値の確認
→全部問題無し
セッション切れ
・faviconのリンク切れとかも確認
・「app/config/session.php」の設定の確認
その他
▼今回の問題
・csrfの有効期限
最近、ずっとform送信はajax経由で、送信寸前にcsrfのトークンをセットしていた。
今回、form送信をajax経由じゃなくて、普通に送信していた→csrfの有効期限(10秒)が問題だった
→「if ( !\Security::check_token() ) { ~ CSRFのチェックエラー ~ }」とビュー側にサーバー側のトークン、formに出力するトークンを出力してやっと気づいた。