【Sinatra】動的に追加した文字列からHTMLタグをエスケープする方法
先ほどサイトを確認したところ、なんだか気持ち悪いことになっていました。レイアウトが崩れ、DOM上には切れ目のよくわからないimgタグが...。
原因はとっても簡単で、フィードの取得元のdescriptionにHTMLタグが含まれていたために、それがまんまこちらのDOMに入ってしまったというわけです。
解決策
main.rb(コントローラのファイル)のhelpersに、「エスケープのためのメソッド使いたいっす」ってことを書き、
helpers do include Rack::Utils alias_method :h, :escape_html end
index.erb(ビューのファイル)とかで変数を埋めこんでる部分に「エスケープしてね」ってことを書く。
<%= h hoge %>
これで大丈夫。
アホ過ぎやばい
今回のサイトは決め打ちのフィード元から情報引っ張るだけだからぜんぜん考えてなかったけど、これユーザーがフォームに入力するようなサービスだったらスクリプト埋めこんだりできて、やばいですよね。
エスケープの手段も知らずにサイト公開してたなんて我ながらアホだったと思います。
ドットインストールだとこちらで解説されています。
» #17 エスケープ処理を施そう | Sinatra入門 - プログラミングならドットインストール