LoginSignup
3
5

More than 5 years have passed since last update.

sinatraでのHTMLのエスケープとXSSについて

Last updated at Posted at 2018-08-27

自分事ですが今はrubyのフレームワークのsinatraを勉強してます
そこで入力フォームからサブミットした文字にエスケープ処理をするという問題に当たりました

文字を入力<input type="text" name="name">

例えばこのように書かれた入力フォームがあるとします

ここで<b>あいうえお</b>という文字列を入力して

post '/form' do
    "#{params[:name]}"
end

これで出力を見ると

あいうえお

のように、HTMLのタグを継承して出力されてしまいます

この時に入力された文字列が悪意のあるスクリプトであった場合、それが実行されてしまい攻撃を受けることになってしまいます

これがタイトルにもあるXSS(クロスサイトスクリプティング)です

これを回避するためにエスケープ処理を導入していきたいと思います

エスケープ処理をする

今回はsinatraでのエスケープ処理を考えていきます

helpers do
  def h(text)
    Rack::Utils.escape_html(text)
  end
end

まずはこれをrbファイルに書き加えます
これを加えることでhメソッドでhtmlのエスケープが可能になります

post '/form' do
    "#{h(params[:name])}"
end

これで実行するとエスケープ処理が施され

<b>あいうえお</b>

と表示されます

参考
Sinatra FREQUENTLY ASKED QUESTIONS: How do I escape HTML?

http://sinatrarb.com/faq.html#escape_html

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5