Cross Site Request Forgery (横断するサイト間でのリクエストの偽造)
認証後にセッションがある場合に他サイトから別人がリクエスト を送ってきて、そのリクエストに応じて本人が知らないうちにデー タが削除されたり変更されたりするという攻撃
クライアントとの間で CSRF トークンをやりとりして安全性を確認.
Rails側でViewを作る場合:デフォルトでCSRFトークンを挿入(app/views/layouts/application.html.erb)
<!DOCTYPE html>
<html>
<head>
<title>Sample3</title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<%= csrf_meta_tags %> ← これ
<%= csp_meta_tag %>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
</head>
<body>
<%= yield %>
</body>
</html>
csrf_meta_tagsは展開されると↓になる
<meta name="csrf-param" content="authenticity_token" /> <meta name="csrf-token" content="5VIy19e29wIniYL2I6JcVxEizSzGteZV6Gp5gssbRJE5smYLra1gTLmX2JzbttmxJ_nUoq6ecGtnV_zbFObmrw" />
Rails外からアクセスする場合:クライアント側でCSRFトークンを設定する必要有り
⇒ また別の機会に…
とりあえず回避する方法(実際にはやってはいけない)
コントローラファイル(app/controllers/application_controller.rb)に以下を追加
トークンが確認できないときにセッションを空にする⇒"protect_from_forgery with: :null_session"
もちろんこれだとセッションが実行できない