[PHP-users 696] Re: セッションID を生成する仕組みについて

Naofumi Kondoh php-users@php.gr.jp
Fri, 13 Jul 2001 11:24:23 +0900


ソフト工房の近藤です。

KOYAMA Tetsuji wrote:
> 
>   小山です。
> 
> At Thu, 12 Jul 2001 16:54:55 +0900,
> Series wrote:
> > 神経質な質問で申し訳ないのですが、PHP4が、セッションIDを発行する
> > 仕組みをご存知でしたら教えていただきたく思います。
> 
>   困ったときはソースを読めるのが、オープンソースなソフトウェアの良いと
> ころです。:-)

....略....

>   個人的には、そのような可能性を云々するよりは、生成されたセッション
> ID を如何に外に漏らさないようにするかを考えるほうが重要なように思いま
> す。HTTP GET で URL に埋め込むのは Referer 漏れの問題があるので大変危
> 険ですし、大事な部分は可能な限り SSL 化して覗き見からも防護したほうが
> いいのは言うまでもありません。


小山さんの言われる通りだと思います。


参考までに私がとっている別の方法をご紹介します。
イントラネットをターゲットにしているので、インター
ネットの場合少し工夫が必要かもしれません。

セッション番号は、RDB の SEIRAL 型を利用した単純
な連続番号。サーバーから HTML ページを送出する都度
連続したページ番号をつけ、重要なパラメーターには、
改竄防止用に MD5 一方向関数の値をつけます。

これで、改竄防止と、最新でない、過去のページ番号で
アクセスしてきた場合のエラー処理が可能です。

MD5 の引数にサーバーの現在時刻(1時間単位とか10分
単位とか)などを付加すれば、RDB にアクセスしなくても
有効時間かどうかのチェックができ、さらに、MD5 の
生成方法をわかりにくくする効果があります。

URL に埋めこむのは、Referer 漏れとか、故意やうっかり
で改竄してしまう可能性が高いのですが、JavaScript 
使用不可の場合は、結構便利です。改竄対策とページ番号
のような通し番号を追加することで、若干の対策は可能
です。

Cookie を使う場合は、同一プログラムを同一 PC の複数
のブラウザから開いて実行させるのが難しいし、きちんと
チェックしないとセッション番号が重複してトラブルの
元になるので、私はあまり好きではありません。

どのような手法が最適かはサイトの内容や方針によるので、
費用と効果を勘案して、セキュリティーポリシーを明確
にするのが、先決でしょう。

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
 (株)ソフト工房   近藤直文   Email:  nkon@shonan.ne.jp 
           PostgreSQL 汎用DB検索ツール デモ  
      http://www.softkoubou.co.jp/cslweb/index.php3
          http://www.shonan.ne.jp/~nkon/
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/