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

RailsでXSSを防ぐ完全ガイド|ERB自動エスケープ・sanitize・Content Security Policy設定

XSSを防ぐ:ERB自動エスケープ・sanitize・content_security_policyの設定
XSSを防ぐ:ERB自動エスケープ・sanitize・content_security_policyの設定

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

生徒

「Railsで作ったWebアプリって、セキュリティ対策もしないと危ないんですか?」

先生

「はい。特にXSSという攻撃は、初心者の方が知らないうちに被害を受けやすいです。」

生徒

「XSSって何をされるんですか?」

先生

「悪意のあるスクリプトを画面に表示させて、ユーザーをだましたり情報を盗んだりします。Railsにはそれを防ぐ仕組みが最初から用意されていますよ。」

生徒

「初心者でもちゃんと対策できますか?」

先生

「大丈夫です。ERBの自動エスケープ、sanitize、Content Security Policyを順番に理解すれば安心です。」

1. XSSとは何か?Railsで対策が必要な理由

1. XSSとは何か?Railsで対策が必要な理由
1. XSSとは何か?Railsで対策が必要な理由

XSS(クロスサイトスクリプティング)とは、Webページに悪意のあるプログラムを埋め込まれてしまう攻撃方法です。掲示板やコメント欄など、ユーザーが入力した内容を画面に表示する場面で起こりやすくなります。

例えば、名前を書く欄にJavaScriptを書き込まれ、それがそのまま表示されると、ページを見た人のブラウザで勝手に実行されてしまいます。Railsでは、こうした危険を防ぐためにXSS対策が標準機能として組み込まれています。

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

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

※ Amazon広告リンク

2. RailsとMVC構造におけるXSS対策の位置づけ

2. RailsとMVC構造におけるXSS対策の位置づけ
2. RailsとMVC構造におけるXSS対策の位置づけ

RailsはMVCという設計を採用しています。MVCとは、Model(データ)、View(画面)、Controller(制御)に役割を分ける考え方です。XSS対策の中心はView(ビュー)で行われます。

画面に表示する部分で安全対策を行うことで、データベースに危険な文字が保存されていても、ユーザーに見せる段階で無害化できます。Railsではこの思想が最初から取り入れられています。

3. ERBの自動エスケープでXSSを防ぐ仕組み

3. ERBの自動エスケープでXSSを防ぐ仕組み
3. ERBの自動エスケープでXSSを防ぐ仕組み

Railsでよく使われるテンプレートエンジンがERBです。ERBでは、<%= %>を使って値を表示すると、自動的にHTMLエスケープが行われます。

HTMLエスケープとは、タグとして解釈される文字を、ただの文字として扱う変換処理です。


<p><%= @user.name %></p>

もし@user.nameにscriptタグが含まれていても、画面上ではただの文字として表示され、プログラムは実行されません。これがRailsの自動エスケープ機能です。

4. rawやhtml_safeを使うときの危険性

4. rawやhtml_safeを使うときの危険性
4. rawやhtml_safeを使うときの危険性

Railsにはrawhtml_safeというメソッドがあります。これらは「エスケープしないで表示する」という意味です。


<p><%= raw @message %></p>

便利に見えますが、ユーザー入力をそのまま表示するとXSSの原因になります。初心者のうちは、基本的に使わないと覚えておくと安全です。

5. sanitizeで安全なHTMLだけを許可する

5. sanitizeで安全なHTMLだけを許可する
5. sanitizeで安全なHTMLだけを許可する

どうしてもHTMLを含んだ文章を表示したい場合があります。そのときに使うのがsanitizeです。sanitizeは、危険なタグを削除し、安全なタグだけを残します。


<%= sanitize @comment %>

例えば、<script>タグは消されますが、<b>などの装飾用タグは残せます。これにより、XSSを防ぎながら表現の自由を保てます。

6. Content Security Policy(CSP)とは何か

6. Content Security Policy(CSP)とは何か
6. Content Security Policy(CSP)とは何か

Content Security Policy(コンテンツセキュリティポリシー)は、ブラウザに対して「どこからのスクリプトを実行してよいか」を指示する仕組みです。

Railsでは、CSPを設定することで、仮にXSSが混入してもスクリプトの実行自体を防止できます。これは二重の安全対策になります。

7. RailsでContent Security Policyを設定する方法

7. RailsでContent Security Policyを設定する方法
7. RailsでContent Security Policyを設定する方法

Railsでは、config/initializers/content_security_policy.rbでCSPを設定します。


Rails.application.config.content_security_policy do |policy|
  policy.default_src :self
  policy.script_src  :self
end

これにより、自分のサイト以外から読み込まれたスクリプトは実行されなくなります。初心者でも比較的安全に使える設定です。

8. XSS対策とStrong Parametersの関係

8. XSS対策とStrong Parametersの関係
8. XSS対策とStrong Parametersの関係

Strong Parametersは、コントローラで受け取るパラメータを制限する仕組みです。これは主に不正なデータの保存防止に役立ちます。


params.require(:user).permit(:name, :email)

XSSはビューで防ぎ、Strong Parametersはコントローラで守る。このようにRailsでは役割分担しながらセキュリティを高めています。

カテゴリの一覧へ
新着記事
New1
Rails
RailsでXSSを防ぐ完全ガイド|ERB自動エスケープ・sanitize・Content Security Policy設定
New2
Rails
Railsのテスト環境を整えよう!RSpec・FactoryBot・Capybaraの初期設定ガイド
New3
データベース
Redisのメモリ管理を徹底解説!爆速データベースの仕組みとパフォーマンスの秘密
New4
Ruby
Rubyのcase/when文を完全攻略!複数条件や正規表現での分岐を初心者向けに解説
人気記事
No.1
Java&Spring記事人気No1
Ruby
WindowsでRubyをインストールする方法!RubyInstallerとMSYS2を使った完全ガイド
No.2
Java&Spring記事人気No2
Ruby
OpenSSL関連エラーの直し方を完全解説!証明書・ビルドオプション・brew対策まとめ
No.3
Java&Spring記事人気No3
Ruby
RubyのEnumerable高速化ガイド!N+1問題や無駄なループを減らす最適化テクニック
No.4
Java&Spring記事人気No4
データベース
Redis入門!キャッシュの仕組みやメリットを初心者向けに徹底解説
No.5
Java&Spring記事人気No5
Ruby
Gemとは?RubyGemsとBundlerを初心者向けに完全解説!依存関係管理も図解でわかりやすく理解
No.6
Java&Spring記事人気No6
Ruby
RubyのEnumerable活用術!売上集計・ログ解析・CSV加工を効率化するビジネス実例ガイド
No.7
Java&Spring記事人気No7
Rails
Railsメール確認(confirmable)の実装手順を完全ガイド!初心者でもわかる有効化リンクと期限設定
No.8
Java&Spring記事人気No8
Ruby
Rubyの命名規則を完全ガイド!初心者でもわかるsnake_caseとCamelCaseの使い分け