7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

simple_formatって?

Last updated at Posted at 2024-12-10

概要

simple_format は、テキストをシンプルなHTML形式に変換するRailsのヘルパーメソッドです。主に、改行をHTMLタグに変換する用途で使用されます。

以下の条件で文字列が加工されます。

  • 文字列全体を <p> タグで括る
  • 改行は <br /> に変換
  • 連続した改行は新たな <p> タグに変換

具体例

<%= simple_format("Hello\nWorld") %>

出力結果

<p>Hello<br />
World</p>

改行コードが<br>に変換され、文字列全体が<p>で囲まれました。

注意点

HTMLタグを含むテキストに適用する場合、タグがエスケープされずにそのまま表示されます。

具体例

<%= simple_format("<h1>Hello\nWorld</h1>") %>

出力結果

<h1>Hello<br />
World</h1>

<h1>タグはエスケープされずにそのまま出力されています。

エスケープされないことにより、意図しないタグが表示されたりXSS攻撃のリスクがあります。

クロスサイトスクリプティング (XSS) とは

フォームやURLパラメータなどに実行可能なスクリプトを挿入し、ユーザーの環境で悪意のある操作を実行させる攻撃です。

オプション

h

hメソッドは、HTMLをエスケープして安全に表示するために使用されます。
このメソッドを使用することで、テキスト内のHTMLタグをそのまま文字列として出力することが可能です。

具体例

<%= simple_format(h("<h1>Hello\nWorld</h1>")) %>

出力結果

<p>&lt;h1&gt;Hello<br />
World&lt;/h1&gt;</p>

<h1>タグがエスケープされ、ブラウザには文字列として表示されます。

sanitize

sanitize は、不要なHTMLタグを除去し、必要なタグだけを許可するために使用されます。
これにより、HTMLを部分的に許可しつつ安全性を確保できます。

具体例

<%= simple_format(sanitize("<h1>Hello\nWorld</h1><script>alert('XSS!攻撃!');</script>")) %>

出力結果

<p><h1>Hello<br />
World</h1></p>

<script> タグは除去され、<h1> タグのみが残ります。

hメソッドとsanitizeオプションの違い

  • hメソッド
    すべてのHTMLタグをエスケープして無効化します。ユーザー入力を完全に文字列として表示したい場合に使用します。

  • sanitizeメソッド
    不要なHTMLタグを除去し、必要なタグのみを残します。一部のHTML装飾(例: 太字や斜体)を利用したい場合に適しています。

これらのオプションを活用することで、simple_format の出力を安全かつ正確に制御できます。

参考

7
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?