2006-08-02
■ [ruby] XSS - 表示系パラメータに存在する盲点 : Rubyの場合
Ruby+ERBだと
<a href="http://example.com/test.cgi?id=<%= id %>">hoge</a>
みたいな書き方は危険で、
<a href="http://example.com/test.cgi?id=<%=u id %>">hoge</a>
のようにしようってことでいいのかな!
Ruby+ERBでCGIを書くときは、
- 基本的に、<%= str %>ではなく <%=h str %> を使う。
- a hrefのURLの中に埋め込むときは <%=u str%>を使う。
- どうしてもstrの中でHTMLタグを使いたいときだけ、<%= str %> (エスケープなし)を使う。
という感じでやってます。
トラックバックされている記事にもあるけど、いちいち 「無害化する必要があるか?」を考えてるときっといつか間違うので、 逆に「基本的に全部無害化する」「無害化したくないときだけエスケープなしを使う」というのが良さそう。
実際hがデフォルトだったらいいのにという話もありましたね。
おまけ : hとuってどう違うの?
irb(main):002:0> require 'erb' irb(main):003:0> include ERB::Util irb(main):004:0> h "<script>" => "<script>" irb(main):005:0> u "<script>" => "%3Cscript%3E"
Nice site!<br>[url=http://lswzveig.com/qvey/otxl.html]My homepage[/url] | [url=http://jlisaawu.com/mfpb/dxgg.html]Cool site[/url]
Well done!<br>[url=http://jorayudu.com/hywb/lfzq.html]My homepage[/url] | [url=http://kiszkzla.com/lgew/gioz.html]Cool site[/url]