skimemo


skimemo - 日記/2020-02-17/Laravel5.6.9以上に移行すると419エラーが出る

_ Laravel5.6.9以上に移行すると419エラーが出る

_ 概要

手元のシステムはLaravel5.4で動いていました。
これを最新の6.xに移行したとき、頻繁に419 Session Expireエラーが出るようになった話です。

_ 原因

原因は、Session::regenerate()でした。
セッションIDの再生成はセキュリティの観点から推奨される処理です。 このregenerate()ですが、Laravel5.6.9から、実行時にCSRF TOKENも再生成されるようになりました。

regenerate the token on session regeneration

件のシステムは画面遷移時にほぼ毎回Session::regenerate()を実施していたため、エラーでredirect()->back()で戻った際などにTOKENが再利用される場合、419エラーが発生していたのでした。
regenerate処理のソースを見ると、

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
/**
 * Generate a new session identifier.
 *
 * @param  bool  $destroy
 * @return bool
 */
public function regenerate($destroy = false)
{
    return tap($this->migrate($destroy), function () {
        $this->regenerateToken();
    });
} 

となっていて、migrate()実施後にトークンを作り直しているので、「Session::regenerate()」を「Session::migrate()」とすることで回避しました。
アクセス修飾子は public ですがマニュアルには載っていないので、一応自己責任で・・・。

Category: [Linux] - 16:24:18



 
Last-modified: 2020-02-17 (月) 16:29:32 (245d)