RamazeさんのセッションIDの作り方

2008-07-05

という記事を読みました。Kahua, Rails, Ethna の各フレームワークのセッションIDの作り方が大変良くまとまっていて、素晴らしいと思いました。でもこれを読んで「そういえば!」と思い出したのは Ramaze さんのセッションIDの作り方です。前に読んだ時にも気になったんですが、現在のところ次のようになっています(ramaze/current/session.rb)。

    def self.random_key
      h = [
        Time.now.to_f.to_s, rand,
        Current.request.hash, rand,
        Process.pid, rand,
        object_id, rand
      ].join
      Digest::SHA256.hexdigest(h)
    end

つまり、現在の時間、乱数、現在のリクエストのハッシュ値、乱数、PID、乱数、クラス Ramaze::Current::Session のオブジェクトID、乱数を連結したものをSHA256でダイジェストをとって作っています。

過剰というか、本当にここまでやる意味があるんだろうかと疑問を感じました。少なくとも Rails 同様に SecureRandom がある時にはそっちを使っておいた方が良いのではないでしょうか。もう少し色々検討してみてからパッチを作成してみようかな、と思います。