トップ «前の日記(2006-08-01) 最新 次の日記(2006-08-07)» 編集

Route 477



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>"
=> "&lt;script&gt;"
irb(main):005:0> u "<script>"
=> "%3Cscript%3E"
本日のツッコミ(全2件) [ツッコミを入れる]
Rebecca (2006-11-17 04:37)

Nice site!<br>[url=http://lswzveig.com/qvey/otxl.html]My homepage[/url] | [url=http://jlisaawu.com/mfpb/dxgg.html]Cool site[/url]

Britney (2006-11-18 08:41)

Well done!<br>[url=http://jorayudu.com/hywb/lfzq.html]My homepage[/url] | [url=http://kiszkzla.com/lgew/gioz.html]Cool site[/url]