PHPで安全なセッション管理を実現する方法に対する高木さんのコメントへのフォロー を読んで、Ruby の CGI::Session について調べてみた。
Ruby 1.8.5 では、デフォルトの session ID 生成アルゴリズムは次のようになっている。
def create_new_id
require 'digest/md5'
md5 = Digest::MD5::new
now = Time::now
md5.update(now.to_s)
md5.update(String(now.usec))
md5.update(String(rand(0)))
md5.update(String($$))
md5.update('foobar')
@new_session = true
md5.hexdigest
end
ここで、session ID の生成を現状のものではなく /dev/urandom があれば使うようにするべきなのかどうかは、自分には分からなかった。 (/dev/urandom を使えば問題ないのは確かだが、現状のものがまずいのかどうかは分からなかった)
session ID の生成については [ruby-dev:24183] で問題が指摘されているが、 これは今は解決しているようだ。(Time#usec を使うようになったのと、srand に /dev/urandom を使うようになったため)