LoginSignup
0
0

More than 3 years have passed since last update.

RailsのCSRF対策と、public配下のhtmlファイルについて

Last updated at Posted at 2020-06-04

環境とエラーメッセージ

RailsのERbを使わず、public配下のhtmlファイル(静的ファイル)から、データをPOST通信しようとしている。

ターミナル.
Can't verify CSRF token authenticity.

要は、「想定していたセキュリティートークンと違うので、リクエストを弾いた」ということになります。

CSRFとは

クロス・サイト・リクエスト・フォージェリーの略で、不正行為の一つ。

攻撃者が被害者にリンクをクリックさせる、またはページを訪問させることで、対象のサイトにリクエストを送らせる行為。
つまり、攻撃者は自分を有効なリクエストだと認証させ、被害者のアカウント情報をいじったりできてしまうという被害が生まれる。

そこで、Railsでは悪質なものを通常のリクエストだと誤認させないように対策を自動でしている。

Railsの対策

Railsでは既に、application_controllerにCSRF対策のコードが自動で埋め込まれている。

application.controller.rb
protect_from_forgery with: :exception

これは必須セキュリティトークンを導入していて、Railsが生成する全てのフォームや、Ajaxリクエストで自動にこのトークンを含めるというもの。

もし、セキュリティトークンが想定している値と一致しなければ、エラーとさせることができる。

CSRF対策自体を無効にさせる

application_controller.rb
protect_from_forgery with: :null_session

全てのアクションに対して、CSRF対策を無効化している。
しかし、これだと極端に攻撃性に弱くなってしまうという問題がある。

部分的にセキュリティトークンを除外させる

外部からのAPIを受ける特定のアクションのみ除外させることで、安全性を担保しつつ、クライアントからのデータを受け取ることができる。

feeds_controller.rb
protect_from_forgery :except => [:create, :index]

def create
end

def index
end

コントローラのアクション名を指定することで、public配下のhtmlファイルからのデータを受け取ることができるようになった。

参考にさせていただきました

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0