旧gaaamiiのブログ

間違ったことを書いている時があります。コメントやTwitter、ブコメなどでご指摘ください

【Sinatra】動的に追加した文字列からHTMLタグをエスケープする方法

またしても3つのはてブSinatraについてです。

先ほどサイトを確認したところ、なんだか気持ち悪いことになっていました。レイアウトが崩れ、DOM上には切れ目のよくわからないimgタグが...。

f:id:shgam:20130822140418j:plain

原因はとっても簡単で、フィードの取得元のdescriptionにHTMLタグが含まれていたために、それがまんまこちらのDOMに入ってしまったというわけです。

解決策

main.rb(コントローラのファイル)のhelpersに、「エスケープのためのメソッド使いたいっす」ってことを書き、

helpers do
    include Rack::Utils
    alias_method :h, :escape_html
end

index.erb(ビューのファイル)とかで変数を埋めこんでる部分に「エスケープしてね」ってことを書く。

<%= h hoge %>

これで大丈夫。

アホ過ぎやばい

今回のサイトは決め打ちのフィード元から情報引っ張るだけだからぜんぜん考えてなかったけど、これユーザーがフォームに入力するようなサービスだったらスクリプト埋めこんだりできて、やばいですよね。

エスケープの手段も知らずにサイト公開してたなんて我ながらアホだったと思います。

ドットインストールだとこちらで解説されています。
» #17 エスケープ処理を施そう | Sinatra入門 - プログラミングならドットインストール