トップ 最新 追記

Route 477



2006-08-01

[lab] 嵐は過ぎ去った

怒涛のレポート攻勢もなんとか一段落。

あと8日提出のレポートを書けば夏休みだぜ!

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

Rebecca [Nice site! [url=http://lswzveig.com/qvey/otxl.html]My home..]

Britney [Well done! [url=http://jorayudu.com/hywb/lfzq.html]My home..]



2006-08-16

[misc] 旅に出ます、探さないでください

いやまあ探してくれても良いけど。

8/18から東北の方(岩手→青森→秋田)に旅行に出ます。 メールも読めなくなります(早く携帯も日本語対応してくれ>gmail)。

帰ってくるのは9/1〜9/6のうちのいずれかです。気分次第。

現在絶賛夏バテ中なんで、健康になって帰ってくる予定。

本日のツッコミ(全1件) [ツッコミを入れる]

常木 清 [元気そうでいいですね。気をつけて移動してください。]


2006-08-29

[misc] 秋田

岩手から下北半島・恐山・竜飛崎と青森を回って、白神山地を越えて秋田にいます。

[ruby][SDL] とある商業ゲームは Ruby + SDL で実装されている

(ある理由によりタイトルは書けないが、RPG ツクールではない。さっそく注文しといた)

超気になる!注文したい!

Ruby/SDLは使ってるんだろうか?

本日のツッコミ(全1件) [ツッコミを入れる]

西田吉伸 [商業ゲームやりたいです]