[PHP-users 725] Re: セッション情報の漏洩を防ぐ方法

新開連三 php-users@php.gr.jp
Mon, 16 Jul 2001 11:01:57 +0900


お世話になります、新開です。

大垣さん
> 完璧では無いですが、session fileを保存するディレクトリの
> パーミッションを300にするとファイル名が解らないのでこれで
> ほとんどの場合はOKと思います。(セッション保存先のディレクトリは
> php.iniで変更。OwnerはApacheのUserID。)
> こうしておけばSESSION IDを推測してアタックされるた時と同じ程度の
> 保護となります。
> # 簡単なPHPスクリプトを作成して短時間に大量のIDを試すと言う方法は
> # 残されますが、、、
> ディレクトリリスティングが出来なくなるので、Sessionモジュールの
> ソースをある程度変更する必要があると思います。
> ガーベッジコレクション関連のコード等。ガーベッジコレクションを
> 使わなければ、変更の必要が無いかも知れません。
この方法でテストしてみました。セッション保存先のディレクトリは
php.ini .htaccess session_save_path関数等で指定しました。
セッション変数を使用する分には、ディレクトリリスティングが
出来なくても問題ないようです。
ソースを見たところ、HTPP_COOKIEで渡された値を元にしてセッション
ファイルをオープンしているようです。
(ちなみに、COOKIE GET POST の順でセッションIDを取得することが
ソースを読んで分かりました)
ガーベッジコレクションについては、まだ確認していません。
セッションIDを総当たりで試してクラックするのは、事実上不可能
でしょうね。
chmod されると意味がないので、safe_mode で対処するか、環境によっては
ownerをroot、groupをnobody等にするのがいいかな、と思っています。

> chrootを使ってApacheの環境を別にしてしてまう、VMWareを使うなどの方法も
> 考えられます。最近のHDDは安くて大きいのでchroot環境も、システム全体を
> コピーしてしまえば簡単に出来ます。
せっかく教えて頂いたのに申し訳ございませんが、かかるコストと効果から判断
して、上記の方法が1番と思い、試していません。
PHPのマニュアルのセキュリティの項に
「sudoやchrootの実行、ルート権限で実行を行う他の手段は、
セキュリティに精通した人以外は、考慮するべきではありません」
ともあり、ひとえに私の力不足でありますが。

> > # FileよりDBを使った方が楽と思いますが、、、
> よく考えて見るとFileの方が楽ではないか?と今は思っています。
> 管理・監視はDBの方が便利ですが、設定・運用はやはりFileの方が簡単です
> ね。
私の場合ですと、管理・監視するほどのデータではなかったりします。
ログイン時に入力したユーザIDをセッション変数に登録している程度です。
IT Boost の松嶋様の受け売りですが、
http://www.itboost.co.jp/
PostgreSQLはPHP4のセッション管理には向いていないと思い、当面はFileを
使っていこうと思います。

以上、ありがとうございました。