しおブログ言うてますけど

技術ブログ言うてますけど技術以外のことも発信すると思われ。RubyとかRuby on Railsとか生き方とかジャンルにこだわらず自分の好きなように。初心者なのでお手柔らかに。

現場Railsで唐突に出てきたメソッドの理解

Railsを勉強している人なら誰しもがわかる技術書「現場で使えるRuby on Rails速習実践ガイド(以下、現場Rails)」にて勉強していたらRailsチュートリアルでも見たことのないメソッドが出てきて、 「現場で使われるということはこういうことか...」とか勝手に思った。

どのようなメソッドだったのか。
simple_formatメソッドである。(そんなん知ってるわ、って思っていたらすみません) 現場RailsのChapter3-3で出てくる。現場Railsによると、

simple_formatはデフォルトエリアを

タグで囲い、テキストに含まれる一部の危険なHTMLタグを取り除いてくれます(=sanitizeオプション)。

しかし今回は一部のタグを取り除くのではなく、すべてのタグを安全な形で表示することにします。〜以下略

と書いてある。しかしよくわからない。
テキストに含まれる一部の危険なHTML?! これは調べないとわからない。。Railsドキュメントでググってみよう。

説明

  • 文字列を<p>で括る。
  • 改行は <br/> を付与。
  • 連続した改行は、</p> <p>を付与。

使い方

simple_format(文字列 [, オプション or HTML属性 or イベント属性])

オプション

オプション 説明
:sanitize サニタイズ
:wrapper_tag 文字列を囲むタグ

イベント属性

イベント属性 説明
:onclick クリックされた時
:ondblclick ダブルクリックされた時
:onmousedown マウスのボタンが押し下げられた時
:onmouseup マウスのボタンが離された時
:onmouseover カーソルが重なった時
:onmousemove カーソルが移動した時
:onmouseout カーソルが離れた時
:onkeypress キーが押されて離された時
:onkeydown キーが押し下げられた時
:onkeyup キーが離された時

<% text = <<EOL
テキスト

テキストテキスト
EOL %>
<%= simple_format(text) %>
# <p>テキスト</p>
# <p>テキストテキスト</p>

simple_formatの概要は理解できた。では一体なぜこのようなメソッドがあるのか。
冒頭で?になっていたテキストに含まれる一部の危険なHTMLタグを取り除くということがこのメソッドの特徴である。

sanitize(サニタイズ)とは

サニタイズ(Sanitize)とは、危険なコードやデータを変換または除去して無力化する処理です。 たとえば、Webサイトに設置された入力フォームなどから、悪意のあるコードが入力され、その文字列が実行されることで様々な被害に遭う可能性があります。この入力値に対しサニタイズを行い、悪意のあるコードを無力化(単なる文字列として扱う)することで、被害を阻止することができます。 サニタイズ(Sanitize) | セコムトラストシステムズのBCP(事業継続計画)用語辞典より

では度々危険なHTMLタグや危険なコードと言っているが危険な〜とはどういうことなのか。
クロスサイトスクリプティングXSSという、攻撃対象のウェブサイトに、脆弱性がある掲示板のようなウェブアプリケーションが掲載されている場合に、悪意のある第三者がそこへ罠を仕掛け、サイト訪問者の個人情報を盗むなどの被害をもたらす攻撃が危険ということがわかった。

www.kagoya.jp

クロスサイトスクリプティングXSS)については上記の記事でわかりやすく図を使って説明されているので掲載しておく。
また→XSS攻撃体験サイトでは実際にクロスサイトスクリプティングXSS)が体験できるサイトなのでどういうものなのか体感できます。

まとめ

初めてsimple_formatの説明を現場Railsで読んだときは危険ななんとかかんとかってなんやねん!って思ってましたが、クロスサイトスクリプティングXSS)という攻撃があり、これがどのような危険があるかということを知ることができ、セキュリティ面で非常に活躍するメソッドなんだなということがわかった。WEBアプリケーションでセキュリティは一番大事といっても過言では無いと思うので、simple_formatメソッドを使いこなせるようにしていきたい。