カテゴリ: Rails 更新日: 2026/03/21

RailsのCSRF対策を完全解説!authenticity_token・SameSite・APIモードまで初心者向けに理解

CSRF対策の仕組み:authenticity_token・SameSite・APIモードの扱い
CSRF対策の仕組み:authenticity_token・SameSite・APIモードの扱い

先生と生徒の会話形式で理解しよう

生徒

「Railsでフォームを送信するとき、セキュリティ対策って何か必要なんですか?」

先生

「Railsでは最初からCSRFという攻撃を防ぐ仕組みが組み込まれています。」

生徒

「CSRFって何ですか?聞いたことがなくて…」

先生

「では、仕組みと一緒に、authenticity_tokenやCookieの話も順番に見ていきましょう。」

1. Railsとセキュリティ対策の関係

1. Railsとセキュリティ対策の関係
1. Railsとセキュリティ対策の関係

Railsは、Webアプリケーションを安全に作るためのセキュリティ対策が最初から用意されています。その代表例がCSRF対策です。CSRFとは、利用者が気付かないうちに、意図しない操作を実行させられてしまう攻撃のことです。Railsでは「正しい画面から送られた操作かどうか」をチェックすることで、不正なリクエストを防いでいます。

Railsの仕組みを根本から理解し、現場で通用する 「設計のセオリー」を身につけたいならこの一冊。 MVC、テスト、Docker対応など、実践的な内容が凝縮されています。

パーフェクト Ruby on RailsをAmazonで見る

※ Amazon広告リンク

2. CSRF(クロスサイトリクエストフォージェリ)とは?

2. CSRF(クロスサイトリクエストフォージェリ)とは?
2. CSRF(クロスサイトリクエストフォージェリ)とは?

CSRFは、とてもシンプルに言うと「なりすまし操作」です。例えば、ログイン中の状態で別の怪しいサイトを開くと、そのサイトから勝手にデータ更新の指示が送られてしまうことがあります。本人は何もしていないのに、サーバー側は「正規の操作」だと勘違いしてしまいます。Railsでは、このような攻撃を防ぐために、特別な合言葉を使います。

3. authenticity_tokenの仕組み

3. authenticity_tokenの仕組み
3. authenticity_tokenの仕組み

Railsでは、この合言葉をauthenticity_tokenと呼びます。フォーム画面を表示するときに、ランダムな文字列を一緒に埋め込み、送信時に一致するかを確認します。一致しなければ、不正な操作として拒否されます。


<form action="/posts" method="post">
  <input type="hidden" name="authenticity_token" value="ランダムな文字列">
  <input type="text" name="title">
  <input type="submit">
</form>

4. コントローラでのCSRFチェック

4. コントローラでのCSRFチェック
4. コントローラでのCSRFチェック

Railsのコントローラでは、CSRF対策が自動で有効になります。これを行っているのがprotect_from_forgeryです。通常は自分で書く必要はありませんが、内部ではこの処理が動いています。


class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
end

これにより、tokenが一致しないリクエストはエラーになります。

5. SameSite属性とCookieの関係

5. SameSite属性とCookieの関係
5. SameSite属性とCookieの関係

CSRF対策ではCookieも重要です。RailsではCookieにSameSiteという設定を付けています。これは「別のサイトからのアクセス時にCookieを送るかどうか」を制御する仕組みです。SameSiteを有効にすることで、怪しいサイトからのリクエストにCookieが付かなくなり、攻撃を防ぎやすくなります。


Rails.application.config.session_store :cookie_store,
  key: '_sample_app_session',
  same_site: :lax

6. APIモードでのCSRF対策

6. APIモードでのCSRF対策
6. APIモードでのCSRF対策

RailsにはAPI専用のモードがあります。APIモードでは、画面フォームを使わないため、authenticity_tokenを使わない構成が一般的です。その代わり、トークン認証など別の方法で安全性を確保します。APIモードでは、CSRFチェックを無効にするケースもあります。


class ApplicationController < ActionController::API
end

7. Strong Parametersとの関係

7. Strong Parametersとの関係
7. Strong Parametersとの関係

Strong Parametersは、送信されるデータの中身を制限する仕組みです。CSRFが「誰から送られたか」を守るのに対し、Strong Parametersは「何を送ってよいか」を守ります。両方を組み合わせることで、安全なRailsアプリになります。


def post_params
  params.require(:post).permit(:title, :body)
end

8. CSRF対策を無効にする場合の注意点

8. CSRF対策を無効にする場合の注意点
8. CSRF対策を無効にする場合の注意点

開発中やAPI用途でCSRF対策を外すこともありますが、理由を理解せずに無効にするのは危険です。意図しない更新や削除が起きる可能性があります。Railsが用意している仕組みは、基本的に有効のまま使うのが安全です。

カテゴリの一覧へ
新着記事
New1
Ruby
Rubyのcase-when文を完全ガイド!初心者でもわかるthen・ガード条件・パターンマッチの使い方
New2
Rails
RailsのCSRF対策を完全解説!authenticity_token・SameSite・APIモードまで初心者向けに理解
New3
Rails
メール送信の準備をしよう!SMTPテスト用MailhogとLetter Openerの使い方
New4
データベース
Redis(レディス)入門!メモリ使用量の仕組みとデータベースの基本構造を初心者向けに徹底解説
人気記事
No.1
Java&Spring記事人気No1
Ruby
OpenSSL関連エラーの直し方を完全解説!証明書・ビルドオプション・brew対策まとめ
No.2
Java&Spring記事人気No2
Ruby
WindowsでRubyをインストールする方法!RubyInstallerとMSYS2を使った完全ガイド
No.3
Java&Spring記事人気No3
Ruby
RubyのEnumerable高速化ガイド!N+1問題や無駄なループを減らす最適化テクニック
No.4
Java&Spring記事人気No4
Rails
Railsメール確認(confirmable)の実装手順を完全ガイド!初心者でもわかる有効化リンクと期限設定
No.5
Java&Spring記事人気No5
Ruby
プロキシ環境でも安心!社内ネットワーク下でのRuby gemインストール完全ガイド【SSL対応も解説】
No.6
Java&Spring記事人気No6
Ruby
Gemとは?RubyGemsとBundlerを初心者向けに完全解説!依存関係管理も図解でわかりやすく理解
No.7
Java&Spring記事人気No7
データベース
Redis入門!キャッシュの仕組みやメリットを初心者向けに徹底解説
No.8
Java&Spring記事人気No8
Ruby
RubyのEnumerable完全解説!cycle・zipで繰り返しの達人になろう