Tanaka on Rails

行動・努力・俯瞰

エスケープ回避

エスケープとは?

エスケープ処理とは、プログラミング言語やソフトウェアで文字列を扱う際に、特定の記号文字などに続けて記された文字(の並び)に、その文字本来の意味とは異なる特別な意味や機能を与えること。先頭の特殊な文字を「エスケープ文字」という。

Rails3以降<%= '〇〇' %>を使って出力を行う場合、HTML特殊文字は自動的にエスケープされるようになっているため、文字をありのまま出力したい場合でもエスケープをしてしまう可能性がある。

エスケープを回避するための手段として'〇〇'.html_safesanitize '〇〇'がある。

'〇〇'.html_safe

これを使用することによって、エスケープをせずそのままの文字列を表示できる。
ただ悪意のあるコードなどもそのまま表示してしまうため、安全性はイマイチ。

sanitize '〇〇'

こちらも同様エスケープをせずそのままの文字列を表示できるが、XSS対策もしてくれることによって(XSSとは動的なHTMLを読み込む際に悪意のあるコードが紛れ込んでしまうこと)、悪意のあるコードについてはエスケープされる。

どっちを使う?

なので、システム上であらかじめ準備してある文字列を表示する場合は'〇〇'.html_safe、アプリケーションを使用するユーザが入力したデータを表示する際にはsanitize '〇〇'を使用すればいいと思われる。

参考URL

https://e-words.jp/w/%E3%82%A8%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%97%E5%87%A6%E7%90%86.html
https://www.javadrive.jp/rails/template/index7.html
https://www.y-hakopro.com/entry/2020/01/01/html_safe%E3%81%A8sanitize%E3%81%AE%E9%81%95%E3%81%84
https://qiita.com/kamohicokamo/items/571c58f2d6738a7dfe6a