私の外部記憶装置

ただの覚え書きです。ちょこちょこ見直して加筆・修正していますが、間違ってるかも😅

【Rails】クロスサイトスクリプティング(XSS)とその対策(🚧作成中)


概要

  • クロスサイトスクリプティングXSS)とは:
  • 対策:
    • サニタイズ
      • 概要:攻撃に使われる入力値を取り除くこと
      • 使い所:ブログ作成等で、HTML等による装飾を「許可している」場合。(表示OKなものだけ残し、NGは削除)
      • 実行タイミング:入力の段階
    • エスケープ
      • 概要:Webアプリの出力で、HTMLタグ等で使われる記号を、別の文字列に置き換えること
      • 使い所:コメント欄等で、HTML等による装飾を「許可していない」場合。(全て表示OKで、入力された文字列をそのまま表示)
      • 実行タイミング:出力の段階

エスケープがサニタイズと書かれていることもあり。明確な定義は無いかも

書き方

サニタイズの書き方

🚧作成中

エスケープの書き方

# ヘルパー
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 リファレンスマニュアル)