読者です 読者をやめる 読者になる 読者になる

ポン酢ブログ(β)

The harder you work, the luckier you get. - Gary Player

最近の Sinatra で %2F がつらぽよかった話

こんにちは。というかもう4ヶ月前くらいなんだなあ、ブログ書いたの。

というわけで、今回は備忘録です。

以前自分向けに制作した Sinatra で少し書いたものがあるのですが、 Ruby 2.0.0 がリリースされる前くらい昔に書いたコードなので、久しぶりに起動したらエラーが出ました。

~/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/sinatra-1.4.4/lib/sinatra/base.rb:1488:in `start_server': undefined method `run' for HTTP:Module (NoMethodError)
from ~/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/sinatra-1.4.4/lib/sinatra/base.rb:1426:in `run!'
from ~/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/sinatra-1.4.4/lib/sinatra/main.rb:25:in `block in '


このエラーは

set :server, 'webrick'

と入れたら解決しました。

問題はここからです。

自分の書いた適当コードには、
http://xxx/hoge/◯◯/△△と投げられるようにしているのですが、◯◯の中などにURLエンコードされたスラッシュ「%2F」(/)があると、自動的に / と解釈されて、エラーが生じてしまいます。

とりあえず今の段階で回避するには、

set :protection, :except => :path_traversal

を入れると良いみたいです、が。

なんかディレクトリトラバーサルの対策用の設定っぽいので無効とかにするとよくなさそうな、気が。

今度色々読んでみたいですね...。