ラボ > FuelPHP:エラー絡み、セッション

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に出力するトークンを出力してやっと気づいた。

関連項目

セッションが切断される理由たち