現場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)という、攻撃対象のウェブサイトに、脆弱性がある掲示板のようなウェブアプリケーションが掲載されている場合に、悪意のある第三者がそこへ罠を仕掛け、サイト訪問者の個人情報を盗むなどの被害をもたらす攻撃が危険ということがわかった。
クロスサイトスクリプティング(XSS)については上記の記事でわかりやすく図を使って説明されているので掲載しておく。
また→XSS攻撃体験サイトでは実際にクロスサイトスクリプティング(XSS)が体験できるサイトなのでどういうものなのか体感できます。
まとめ
初めてsimple_formatの説明を現場Railsで読んだときは危険ななんとかかんとかってなんやねん!って思ってましたが、クロスサイトスクリプティング(XSS)という攻撃があり、これがどのような危険があるかということを知ることができ、セキュリティ面で非常に活躍するメソッドなんだなということがわかった。WEBアプリケーションでセキュリティは一番大事といっても過言では無いと思うので、simple_formatメソッドを使いこなせるようにしていきたい。