[PHP-users 25516] Re: session_regenerate_id が古いセッションファイルを消さない件

komura komura @ ma9.seikyou.ne.jp
2005年 4月 29日 (金) 03:02:02 JST


komura です。

On Thu, 28 Apr 2005 17:13:48 +0900
KATOH Yasufumi <karma @ jazz.email.ne.jp> wrote:

> 加藤泰文です.
> 
> >>> On Thu, 28 Apr 2005 15:20:05 +0900 (JST)
>     in message   "[PHP-users 25506] session_regenerate_id が古いセッションファイルを消さない件"
>                   haward-san wrote:
> 
> > しかし、この関数、古いセッションファイルを消してくれないようです。
> > それじゃセッションハイジャック対策にならないような・・・!?
> 
> そうですかね? 古い Session ID で,該当の Session にアクセス (?) 出来な
> ければ,問題ないのではないですかね...
> 
> 古いセッションファイルが残っていて,その古い ID でも同じセッションにア
> クセスできれば問題でしょうけど...

確認したのは PHP 4.3.9 の頃ですが、session_regenerate_id() では古いセッション
ファイルが残り、古い Session ID でアクセスするとセッションの継続が可能でした。

このため、session_regenerate_id() をセッションハイジャック対策として使用する
のであれば、古いセッションファイルを削除する処理を入れる必要があると思います。

または、既に他の投稿にありましたが、php.ini のセッション関連の設定を変更して
セッションの有効期間を短くしてセッションのガーベージコレクションの起動確率を
高くするという方法も考えられます。


個人的には session_regenerate_id() は接続を http から https に変更する際に
secure 属性を付けた Cookie を発行する時に特に便利だと考えています。

http から Session ID を https に渡し、そこで session_regenerate_id() を
使って Session ID を変更してから secure 属性を付けた Cookie を発行して
セッションを継続させるという方法です。

もし、この時、http 時点のセッションファイルを削除してしまった場合は、https
から http に戻る場合に、https から POST を使って Session ID を渡すように
しないと http で保持していたセッション情報を戻すことができなくなると思います。

実際にこのようなことをする必要に迫られたことはありませんが、古いセッション
ファイルが残っていた方が便利な場合もあると思います。

-- 
komura <komura @ ma9.seikyou.ne.jp>


PHP-users メーリングリストの案内