formヘルパーから生成されるタグ
たとえばfomr_tagヘルパーがレンダリングされると、formタグとhidden属性のinputタグが生成される。
1 2 3 4 |
<%= form_tag("/demo_contents/post_memo") do %> ↓ <form action="/demo_contents/post_memo" accept-charset="UTF-8" method="post"> <input type="hidden" name="authenticity_token" value="dN3WEdFwc6ZkCbiW_kMxFNPC_Ajz1BhnydL9kPbCcy3ZrcppdSYNHjitGKaRbvNuAQGxH_ihxcc6EjrK2AAUSA" /> |
CSRF対策
form系のヘルパーで生成されるhiddenタイプのinputタグは、authenticity_token
という名前でランダム文字列を値に持つ。
これはフォームに対する送信を確認するもので、Railsから送ったフォーム以外からの送信を排除するための仕掛け。
CSRF(Cross Site Request Forgeries)は、攻撃者のサイトへのリンクをクリックした場合に、そのサイトから意図しない送信が送られてしまうもの。
Railsではformヘルパーで生成されたトークンとサーバー内に持っているトークンが符合すれば、意図したフォームからの投稿と判断される。このためのメソッドがprotect_from_forgery
。
Rails 5.2より前は、ApplicationController
にprotect_from_forgery
が自動的に記述される。
1 2 3 |
class ApplicationController < ActionController::Base protect_from_forgery with: :exception end |
Rails 5.2以降はActionController::Base
で有効になっていて、追加記述の必要はない。