Railsのcant verify csrf token authenticity 原因 対策

2020年8月4日火曜日

Rails Ruby

t f B! P L

事前知識

csrfとは

クロスサイトリクエストフォージェリの略。悪意あるリクエストを投げてユーザが意図しないアプリケーション操作をさせる攻撃のこと

 例: snsログイン状態でWebサイト閲覧中に悪意のあるURLをクリック。ログインしていたsnsにリクエストが送られ勝手にsns投稿されてしまった。


Railsの対策

form_for、form_tagなどを使用すると自動で認証用のトークンをhtmlに差し込んでくれる。セッションにも保存する。 リクエスト時には生成したトークンを差し込む。サーバ側はそのトークンを確認することで悪意あるリクエストを阻むことができる。 利用には以下の設定が必要

application_controller.rb

protect_from_forgery with: :exception
 

application.html.erb

<%=csrf_meta_tags%>
 

開発中に起こりうるケース

外部からのリクエスト

curlなどでWebアプリに向けてリクエストを投げる。認証トークンがないためエラー

別タブでリクエスト

例:ログインの場合

  • タブA、タブBを開く →セッションに認証用のトークンが保持される

  • タブAでログイン、ログアウトする →セッション終了し認証用のトークンが更新される。タブBは古いトークンのまま

  • タブBでログイン →トークンに差異があるのでエラー

自己紹介

Webエンジニアをやっています。日々思ったことや、読書レビュー、IT系の記事などを書き連ねています

広告

[書籍] ティムクック アップルをさらなる高みへと押し上げた天才 感想まとめ

   こういう人におすすめ ティムクックのことを知らないという人 アップル、ジョブズのファン 概要 2011年 ティムクック がAppleのCEOを引き継ぎました。 クック の知名度は低く、批評家たちは ジョブズ なしではAppleは終わりを迎えるだろうと危惧していました。 しか...

QooQ