概要
- クロスサイトスクリプティング(XSS)とは:
- インジェクション(Webアプリに悪質なコードやパラメータを導入して、そのときのセキュリティ権限で実行させること)の1種
- XSS攻撃に利用されやすい言語は、クライアント側で最も普及しているJavaScriptであり、しばしばHTMLと組み合わせて攻撃に利用される
6.3 クロスサイトスクリプティング(XSS) < Rails セキュリティガイド - Railsガイド
- インジェクション(Webアプリに悪質なコードやパラメータを導入して、そのときのセキュリティ権限で実行させること)の1種
- 対策:
※エスケープがサニタイズと書かれていることもあり。明確な定義は無いかも
書き方
サニタイズの書き方
🚧作成中
エスケープの書き方
- 基本的にビューで対応する
<%= %>
を使えば自動的にエスケープされる(rails3以降)
5.1.2 安全な文字列 < Active Support コア拡張機能 - Railsガイド
🚨ただし、ビューのlink_to
メソッドはエスケープ対象とならず、html_safe
が適用されたのと同じになる(エスケープされない)。ヘルパーメソッドの多くが同じ(button_to
、tag
、content_tag
、form_for
、collection_check_boxes
など)
Rails: ビューのHTMLエスケープは#link_toなどのヘルパーメソッドで解除されることがある|TechRacho by BPS株式会社- 一部(
<br>
など)エスケープせずに表示したい場合、下記のようにヘルパーメソッドを定義し、ビューで使うsafe_join
:「配列(第1引数)の要素」を「区切り文字列(第2引数)」で繋いだ文字列を返す。この時、全てHTMLエスケープされる(html_safe
が適用されたものはエスケープされない)
safe_join < ActionView::Helpers::OutputSafetyHelpertag
:HTMLタグを返す。返されたタグはエスケープされない(html_safe
が適用されたのと同じ)
tag < ActionView::Helpers::TagHelper
# ヘルパー module HogesHelper def format_piyo(hoge) safe_join(hoge.piyo.split("\n"), tag.br) end end # ビューで上記メソッドを使う <%= format_piyo(hoge) %>
その他のエスケープのメソッド
以下、Rubyのメソッド
ERB::Util
モジュールをインクルードして、html_escape()
又は h()
ERB::Util.#h (Ruby 3.3 リファレンスマニュアル)
# 書き方① ERB::Util をクラスで読み込み class Hoge include ERB::Util fuga = html_escape(hoge[:piyo]) # 書き方② ERB::Util を使用箇所で呼び出し fuga = ERB::Util.html_escape(hoge[:piyo])
参考(最新版)
Rails セキュリティガイド - Railsガイド
Active Support コア拡張機能 - Railsガイド
safe_join < ActionView::Helpers::OutputSafetyHelper
tag < ActionView::Helpers::TagHelper
ERB::Util.#h (Ruby リファレンスマニュアル)