#環境とエラーメッセージ#
RailsのERbを使わず、public配下のhtmlファイル(静的ファイル)から、データをPOST通信しようとしている。
Can't verify CSRF token authenticity.
要は、「想定していたセキュリティートークンと違うので、リクエストを弾いた」ということになります。
#CSRFとは#
クロス・サイト・リクエスト・フォージェリーの略で、不正行為の一つ。
攻撃者が被害者にリンクをクリックさせる、またはページを訪問させることで、対象のサイトにリクエストを送らせる行為。
つまり、攻撃者は自分を有効なリクエストだと認証させ、被害者のアカウント情報をいじったりできてしまうという被害が生まれる。
そこで、Railsでは悪質なものを通常のリクエストだと誤認させないように対策を自動でしている。
#Railsの対策#
Railsでは既に、application_controllerにCSRF対策のコードが自動で埋め込まれている。
protect_from_forgery with: :exception
これは必須セキュリティトークンを導入していて、Railsが生成する全てのフォームや、Ajaxリクエストで自動にこのトークンを含めるというもの。
もし、セキュリティトークンが想定している値と一致しなければ、エラーとさせることができる。
####CSRF対策自体を無効にさせる####
protect_from_forgery with: :null_session
全てのアクションに対して、CSRF対策を無効化している。
しかし、これだと極端に攻撃性に弱くなってしまうという問題がある。
#部分的にセキュリティトークンを除外させる#
外部からのAPIを受ける特定のアクションのみ除外させることで、安全性を担保しつつ、クライアントからのデータを受け取ることができる。
protect_from_forgery :except => [:create, :index]
def create
end
def index
end
コントローラのアクション名を指定することで、public配下のhtmlファイルからのデータを受け取ることができるようになった。
##参考にさせていただきました##