TIL

Today I Learned. 知ったこと、学んだことを書いていく

【PHP】LaravelでのCSRF対策

LaravelにはCSRF対策が簡単にできるような仕組みが組み込まれている。また、必ずCSRF対策をしないといけない。
そのため、formを使うときには必ず<form>内に@csrfを記述する必要がある

<form action="/create" method="POST">
    @csrf
    ...
</form>

@csrfは以下のように展開される(Ub7ebV8XbFCTtZyenNoFYyK9ctDzaj09wbp2R7IIの部分は毎回、ランダムな値になる)

<form action="/create" method="POST">
    <input type="hidden" name="_token" value="Ub7ebV8XbFCTtZyenNoFYyK9ctDzaj09wbp2R7II">
</form>

この_tokenも他の値と一緒に送信され、検証が行われる。もし、用意したトークンと一致しなかった場合、419 Page Expiredというエラーになる

CSRF(cross-site request forgeries: クロスサイトリクエストフォージェリ)

しーさふ と読む

Webアプリケーションの脆弱性の1つ

よそのサイトの機能を呼び出す攻撃
CSRFについてかみ砕いて説明してみる – blog.ISHINAO.net

別のサイトのページから悪意のあるリクエストを受け付けないようにする必要がある

以下のような方法が一般的

  1. トークンを埋め込んでページを表示
  2. ユーザがフォームに入力し、submitする
  3. 送られてきたトークンが正しいかどうかチェックする

参考文献