This example shows a simple posts controller with CSRF protection enabled by default. The form automatically includes the CSRF token, so Rails can verify requests are safe.
Ruby on Rails
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
end
class PostsController < ApplicationController
def new
@post = Post.new
end
def create
@post = Post.new(post_params)
if @post.save
redirect_to @post
else
render :new
end
end
private
def post_params
params.require(:post).permit(:title, :content)
end
end
# In the view (new.html.erb):# <%= form_with(model: @post) do |form| %># <%= form.text_field :title %># <%= form.text_area :content %># <%= form.submit %># <% end %>
OutputSuccess
Important Notes
Always use Rails form helpers to get automatic CSRF tokens.
APIs often use :null_session or skip CSRF checks because they use other security methods.
CSRF tokens change with each session to keep protection strong.
Summary
CSRF protection stops unwanted actions from other sites.
Rails adds CSRF tokens automatically in forms created with helpers.
Use protect_from_forgery in ApplicationController to enable protection.
Practice
(1/5)
1. What is the main purpose of CSRF protection in a Rails application?
easy
A. To prevent unauthorized commands from being executed by malicious websites
B. To speed up database queries
C. To improve the user interface design
D. To encrypt user passwords
Solution
Step 1: Understand CSRF meaning
CSRF stands for Cross-Site Request Forgery, which is an attack where unauthorized commands are sent from a user that the web application trusts.
Step 2: Identify CSRF protection goal
The goal of CSRF protection is to stop these unauthorized commands from malicious websites.
Final Answer:
To prevent unauthorized commands from being executed by malicious websites -> Option A
4. You see this error in your Rails app: ActionController::InvalidAuthenticityToken. Which fix will most likely solve the problem?
medium
A. Ensure your forms include the CSRF token by using Rails form helpers
B. Remove the CSRF token from your forms
C. Add protect_from_forgery with: :exception in ApplicationController
D. Disable CSRF protection in config
Solution
Step 1: Identify cause of InvalidAuthenticityToken
This error happens when the CSRF token is missing or invalid in the form submission.
Step 2: Choose fix to include CSRF token
Using Rails form helpers like form_with automatically includes the CSRF token, fixing the error.
Final Answer:
Ensure your forms include the CSRF token by using Rails form helpers -> Option A
Quick Check:
Fix InvalidAuthenticityToken = include CSRF token [OK]
Hint: Use Rails form helpers to add CSRF token automatically [OK]
Common Mistakes:
Adding protect_from_forgery again when already present
Removing CSRF token which causes error
Disabling protection instead of fixing token
5. You want to allow JSON API requests in your Rails app without CSRF errors but keep protection for HTML forms. Which is the best way to do this?
hard
A. Manually add CSRF tokens to JSON requests
B. Disable CSRF protection globally
C. Use protect_from_forgery with: :null_session and handle API authentication separately
D. Use protect_from_forgery with: :exception and skip CSRF check for JSON requests
Solution
Step 1: Understand CSRF and API requests
CSRF tokens are mainly for browser forms; API JSON requests often don't use them and need different handling.
Step 2: Choose best Rails approach
Using protect_from_forgery with: :null_session disables CSRF exceptions for APIs but keeps protection for forms, requiring separate API authentication.
Final Answer:
Use protect_from_forgery with: :null_session and handle API authentication separately -> Option C
Quick Check:
API JSON + CSRF = null_session + separate auth [OK]
Hint: Use null_session for APIs, keep exception for forms [OK]
Common Mistakes:
Disabling CSRF protection globally
Trying to add CSRF tokens manually to JSON
Skipping CSRF only without alternative auth
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.