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

Yasuo Ohgaki php-users@php.gr.jp
Mon, 16 Jul 2001 17:04:23 +0900


大垣です。

> | > が、ファイルでセッション管理を行うとファイルが大量にできてしまい、
> | > i-node 数の不足とかにも気を配らないといけないかもしれません。
> | > 私はそれがイヤなので、MySQL が一番向いてるんじゃないかなぁー
> | > という個人的感想です。
> |
> | しかしsession_start()関数を呼んだ時点でセッションのファイルができて
> | しまうのでどのみちi-node数の不足問題はさけられないような気がするのですが。

Cookie+Fileハンドラーを使ったセッションを利用している場合、i-nodeには気を付けな
いとi-nodeが足りなくなる可能があります。クッキーが無効なブラウザからページをアク
セスする度にセッションファイルが作成されますから、対策としてmkfs時にi-nodeの数を
十分大きくしておく必要があるかもしれません。でも、数万ものファイルが同じディレク
トリにあるとext2だとかなり遅くなると思います。(使い物にならないかも知れませ
ん。)

> これは MySQL(に限らず、DBMS)を使ったの場合の話でしょうか?
> わざわざ DB 使ってるのにファイルができたんじゃ、意味が無いような気が…。^^;
>
> 一応こちらで PostgreSQL 用のセッションイベント処理用のハンドラを普通に
> 書いて検証しましたが、セッション管理ファイルの生成は確認できませんでした。
> (多分 MySQL でも同じですよね?)

SessionハンドラーにUserを設定し、ストレージにDBを利用している場合、セッション
ファイルは作られませんのでi-node不足の心配はありません。

スレッドの趣旨から多少外れますが、PostgreSQL用のセッションハンドラーのサンプルが
必要な方は

http://www.zend.com/codex.php?id=456&single=1

に置いてあります。

# 個人的にはPostgreSQLでセッション管理をしてもそれ程オーバーヘッドは大きくない
# と思います。頻繁にUPDATEが繰り返されるので、比較的頻繁にvacuumする事、
# pconnectを使っている場合、vacuum後にweb serverを再起動させる事、トランザク
# ションを利用している場合、簡単なDoSアタックから守るために各ページが十分短い
# 時間で実行される事、パフォーマンス重視の場合はfsyncをoffにする、多くのDBコネ
# クションが必要な場合はPostgreSQL7.1を利用する、等が主な使用上の注意点
# と思います。
# MySQLの方がだいぶ早いのでしょうか?MySQLは使っていないので、、、、

セッションIDのやり取りに付いて、私見を書きます。セッションIDはクッキーの方が安全
と思っています。例えば、URLのQueryとしてセッションIDを渡している場合、ユーザーの
不注意でセッションID付きのURLをメールで送信して、そのセッションIDがまだ有効だっ
た。セッションID付きのURLを保存してユーザーが必ず同じセッションIDでサイトにアク
セスしてくる、等の弊害は多くのサイトでは受け入れられないと思います。

クッキーを使ったセッションしかサポートしないのであれば、クッキーが無効な場合はエ
ラーページを表示させるJavaScirpt付きHTMLサンプルを

http://www.zend.com/codex.php?id=458&single=1

に置いています。サイトの方針によっては便利かも知れません。
ページには書いてありませんが、自由に使って頂いて結構です。

# また、だらだらと書いてしまいました、、、

 --
Ohgaki, Yasuo (大垣 靖男) 
Mail: yohgaki@dd.iij4u.or.jp