トップ «前の日記(2009-10-09) 最新 次の日記(2009-10-14)» 編集

Route 477



2009-10-13

[rails] Rails3に「デフォルトでHTMLエスケープする機能」が入ったらしい

ERBでは「<%= foo %>」がエスケープなし、「<%= h foo %>」がエスケープありですが、 Rails3のtrunkで、デフォルトでHTMLエスケープを行う機能が入ったそうです。

安全のために「<%= foo %>」の方をエスケープありにすべきだろうという議論は前からあって、 実装もErubis(オプションで可能)とか SafeERB*1 *2とか あったわけですけど、できればRails標準でそうなってた方が良いし、その変更を入れるなら確かにバージョン2→3の今しかない気がします。

エスケープを無効にするにはString#html_safe!を呼ぶか、プラグインで「<%= raw foo %>」のように書けるみたいです。

これがデフォルトになると、Rails2.xのコードがそのまま動かなくなるわけですが、まだ開発版なので、実際には

  • オプションを付けると古い挙動にできる
  • オプションを付けると新しい挙動になる
  • やっぱり取り下げられる

などいろいろな可能性が考えられます。今後も要注目ですね。

そういえばRails 3のMLってあるんでしょうか?http://groups.google.com/group/rubyonrails-core ?

*1 どこが公式サイトかわからん

*2 タグの意味を変えるのではなく、taintedな文字列がhなしの場合にエラーにするのだからちょっと違うか