自分事ですが今はrubyのフレームワークのsinatraを勉強してます
そこで入力フォームからサブミットした文字にエスケープ処理をするという問題に当たりました
文字を入力<input type="text" name="name">
例えばこのように書かれた入力フォームがあるとします
ここで<b>あいうえお</b>
という文字列を入力して
.rb
post '/form' do
"#{params[:name]}"
end
これで出力を見ると
あいうえお
のように、HTMLのタグを継承して出力されてしまいます
この時に入力された文字列が悪意のあるスクリプトであった場合、それが実行されてしまい攻撃を受けることになってしまいます
これがタイトルにもあるXSS(クロスサイトスクリプティング)です
これを回避するためにエスケープ処理を導入していきたいと思います
#エスケープ処理をする
今回はsinatraでのエスケープ処理を考えていきます
.rb
helpers do
def h(text)
Rack::Utils.escape_html(text)
end
end
まずはこれをrbファイルに書き加えます
これを加えることでh
メソッドでhtmlのエスケープが可能になります
.rb
post '/form' do
"#{h(params[:name])}"
end
これで実行するとエスケープ処理が施され
<b>あいうえお</b>
と表示されます
参考
Sinatra FREQUENTLY ASKED QUESTIONS: How do I escape HTML?