見出し画像

ActionController::InvalidAuthenticityTokenのエラーが出る

今回はセッション情報をなくすログアウト動作時に起きたエラーについて起きたことと対策について記載する。

発生状況

ログアウト機能をつけるため、htmlに以下の文を記載し、動作確認を行ったところ今回の問題のActionController::InvalidAuthenticityTokenが発生した。
<%= link_to "ログアウト" ,logoutのURL ,method: :delete %>
logoutのdeleteメソッドではsessionの値をからにするようにしているのだが、本動作のdeleteメソッドを実行するまでは値を保持していることを確認しているのだが、うまく動かないため値の問題ではない。
また、ターミナル上で適切なlogoutのコントローラを動作させているため、問題がないこともわかっている。

csrf_meta_tags

調べてみるとapplication.html.erbにcsrf_meta_tagsがなかったため、エラーが起きてしまった。
rails上の記載ルールのエラーみたいです。
※本来であれば、クロスサイトリクエストフォージェリ(CSRF)の対策のため、csrf_meta_tagsはデフォルトで記載がされている。
他の文章から引用してきた場合は疑ってみるのもいいかと思います。
回避策としては、application.html.erbのheadに以下の動作を記述することでエラーを回避することができる。
<%= csrf_meta_tags %>

クロスサイトリクエストフォージェリー

クロスサイトリクエストフォージェリ(CSRF)は、Webアプリケーションに存在する脆弱性、もしくはその脆弱性を利用した攻撃方法のことで、掲示板や問い合わせフォームなどを処理するWebアプリケーションが、本来拒否すべき他サイトからのリクエストを受信し処理してしまう。
この攻撃方法で、攻撃用Webページを準備し、ユーザがアクセスさせたり、ユーザが攻撃用Webページにアクセスすると、攻撃用Webページ内にあらかじめ用意されていた不正なリクエストが攻撃対象サーバに送られる。
攻撃対象サーバ上のWebアプリケーションは不正なリクエストを処理し、ユーザが意図していない処理が行われて、ユーザ情報をリクエストにより盗まれてしまう可能せがある。
Railsでは生成するすべてのリクエストで自動的にセキュリティトークンを含めるように設計がされているため、セキュリティトークンが想定されている値と一致しなければ、例外(エラー)が投げられるように作られている。

railsのフレームワークを利用して、作成しているため、無意識のうちにセキュリティ対策をしているのだが、理解していない部分が多々あるため今回のようなことが起きた。フレームワークを正しく使うことでセキュリティガイドラインを守ることができるが、エラーが起きることでこんな機能があるのだなと再度理解しました。もしこのようなエラーが出た時は確認してみるのもいいかと思います。

この記事が気に入ったらサポートをしてみませんか?