2006-08-01
■ [ruby] sprintfの引数の順序を入れ替える方法があるって知ってた?
http://www.yotabanana.com/lab/20060729.html#p02
とりあえず、「文字列 % なんか」という書き方(String#%)は知ってるよね。
irb(main):001:0> "My name is %s" % "yhara" => "My name is yhara"
これは下のようなsprintfと同じ。
irb(main):002:0> sprintf("My name is %s", "yhara") => "My name is yhara"
で、「文字列 % 配列」のようにすると複数の引数を渡せるんだけど、
irb(main):003:0> "%s %s" % ["AB", "CD"] => "AB CD"
ここで「%s」の代わりに「%2$s」みたいに書くと引数の順序を入れ替えられるという。
irb(main):004:0> "%2$s %1$s" % ["AB", "CD"] => "CD AB"
確かにsprintfフォーマットの
一番下にこっそり書かれてるなぁ。全然知らなかった。
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"
2006-08-29
■ [ruby][SDL] とある商業ゲームは Ruby + SDL で実装されている
(ある理由によりタイトルは書けないが、RPG ツクールではない。さっそく注文しといた)
超気になる!注文したい!
Ruby/SDLは使ってるんだろうか?
□ 西田吉伸 [商業ゲームやりたいです]
□ Rebecca [Nice site! [url=http://lswzveig.com/qvey/otxl.html]My home..]
□ Britney [Well done! [url=http://jorayudu.com/hywb/lfzq.html]My home..]