LoginSignup
5
2

More than 3 years have passed since last update.

Laravel 419|PAGE EXPIRED 解決方法

Last updated at Posted at 2021-04-29

こちらの記事では今回発生したエラー'419|PAGE EXPIRED'の解決方法と原因についてご紹介します。

今回発生した該当コードは下記の通りです。
検索ワードを入力し、画面遷移したブラウザで検索結果を表示させようとした際にエラーが発生しました。

<form method="post" action="/list/search">
  <input type="text" name="search">
  <button>
  検索
  </button>
</form>

419|PAGE EXPIRED 発生原因と解決方法

発生原因はformタグに@csrfを記述しなかったからです。
@csrfは、CSRF対策のために用意されたBladeディレクティブで、Laravelでは、CSRF対策がなされていないフォームの送信は例外が発生して受け付けられないようになっています!

ですので、formタグに@csrfを追加すれば今回のエラーは解決します。

<form method="post" action="/list/search">
@csrf // CSRF対策
  <input type="text" name="search">
  <button>
  検索
  </button>
</form>

CSRF(Cross Site Request Forgery)とは

CSRFとはクロスサイトリクエストフォージェリと呼ばれるWebアプリケーションの脆弱性を利用したサイバー攻撃の一種になります。

攻撃手法

1.攻撃者が攻撃用Webページや不正なスクリプトなどを準備し、脆弱性のあるサイトのフォームなどから不正送信。
2.攻撃対象サーバ上のWebアプリが不正なリクエストを処理し、ユーザーが意図していない処理が行われる。

影響・被害

攻撃者自身が直接攻撃対象サーバへアクセスせずに、攻撃対象のWebアプリケーションに任意の処理を行わせることができます。

主な攻撃

・いたずら的書き込み
・不正サイトへの誘導
・犯罪予告といった掲示板やアンケートフォームへの不正な書き込み
・フォームへの大量なコンテンツの送り付けによるDoS攻撃

攻撃Webページに誘導された一般ユーザに直接的な被害はありませんが、攻撃対象サーバへの不正なリクエストを送信した攻撃者として認識されてしまうことがあります。

DoS攻撃

情報セキュリティにおける可用性(利用者が必要なときに安全にアクセスできる状態)を侵害する攻撃手法の一種。

Webサービスを稼働しているサーバやネットワークなどのリソース(資源)に、意図的に過剰な負荷をかけたり脆弱性をついたりする事でサービスを妨害します。

@csrfディレクティブ

上記のようなサイバー攻撃を防止するために用意されたのが@csrfです。
@csrfは、「トークン」と呼ばれるランダムな文字列を非表示フィールドとしてフォームに追加し、トークンの値が正しいフォームのみを受け付けるようにします。
こうすることで、用意されたフォームからの送信なのかどうかを見分けることができ、正しいフォーム以外からの不正な送信を阻止することが可能になります!

参考サイト
・参考にしたQiita記事
https://qiita.com/taka_no_okapi/items/fb4bbe59c18eeaf5a043

・Laravel公式ドキュメント
https://readouble.com/laravel/8.x/ja/csrf.html

・クロスサイトリクエストフォージェリについて
https://www.trendmicro.com/ja_jp/security-intelligence/research-reports/threat-solution/csrf.html

5
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
5
2