[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:40138] Re: CGI設置についてのご質問解決しま した。



佐藤です。
だいぶ本題や、Debianとかけ離れてきていますが、もうちょっとだけ。
#既に終わってしまったような気もしますけどね…
 
joeさんの言われたことをまとめると…
・Refererは信用していない。
(Refererは偽装できる)
・PHPのセッションを使うと実装できる。
 
ですが…
 
・PHPのセッションIDもクッキーOFF時かつGET時には以下のように
渡される
http://www.example.com/sub.php?PHPSESSIONID=xxxxxxxx
・同様にPHPのセッションIDは手で入力することが出来る
 
…ということを忘れていませんか?
(クッキー情報を使ったとしてもクッキー情報も偽装できますよね?)
 
この場合、マシンAでアクセスした直後、同じセッションIDをマシンB
で使用すると問題なく(?)そのまま表示されてしまいませんか?この
場合、マシンBは入り口を通らすにアクセスできてしまう事になりま
せんか?
 
そのことについてどうやって回避できるのかを吉藤さんや、Tietew
さんは聞かれていると思うのですが…。
#違ったらスミマセン。m(_ _)m
 
さらに…
・上記の様なクッキーを使わない場合、PHPのセッション情報も含め
た形でReferer情報を取得することができる。
※ただし偽装されている可能性もある
・PHPのセッション情報はある程度の時間サーバに保持されている
・アクセスするたびにIPアドレスが変わってしまうブラウザもある
#i-mode等がこれに該当したかと…
 
ということも考えると、(飛躍して考えると)悪意を持った人がその
Refererを使って進入してくることも考えられませんか?
 
こーなると、Refererチェックをしたくなりますが、Refererも偽装
出来るので信用出来ない。
IPアドレスも変わってしまう可能性がある。
・・・などなどいろんな問題が出てくると思うのですが…。
 
> > いや、そうじゃなくて…、
> > 
> > |入口の index.html なり、index.cgi、index.php なりから
> > |のみ呼出先の cgi が実行できるような仕様になっていないと
> > |いけないと思います。
> > 
> > は、具体的にはどういう仕様でしょう?
(…略…)
> そのくらいのことが分からないのなら、突っ込まないように。
※「入口の index.html なり、index.cgi、index.php なりからの
み呼出先の cgi が実行できるような仕様」を「入り口チェック」
と定義させていただきます。
 
先ほどの飛躍した部分は別として、入り口からの呼び出しだけって
どうやって判断できるのでしょうか?PHPのセッションを使っても
サーバ内に有効なセッションIDが存在していれば…
http://www.example.com/sub.php?PHPSESSIONID=xxxxxxxx
(xxxxxxxxは有効なセッションID)のようにすると入り口を飛ばして
入れてしまうし…。

> もっと勉強しなさい。
PHPについてまだまだ勉強途中なのでjoeさんが言われる仕様の実装
イメージが見えてきません。
joeさんの発言は、「入り口"だけの"チェック」と読み取れたので
すが…実際にはどのようなイメージだったのでしょうか?

100%の精度で入り口チェックができるのなら問題ないと思うのです
が、当方はその方法が思いつかないので、PHPのセッションを使う
度に(スクリプト単位で)毎回ブラウザ情報とかIPアドレスとかを比
較(IPアドレスが違う場合には、同一ドメインが管理しているIPア
ドレスであるか?:まだ未実装^^; )してブラウザとセッションIDが
一致している(ほぼ一緒と考えることが出来る)かをチェックしてい
ますが、これでも精度的には100%では有りません。
(この時エラーと判断すればログイン画面に遷移すればよいだけで
しょうし。)

もしjoeさんが意図する"入り口チェック"が上記のようなものであ
れば、「入口の index.html なり、index.cgi、index.php なりか
らのみ呼出先の cgi が実行できるような仕様」とは違うものだと
思うのですが…。
※この場合だと入り口のチェックというよりセッションの有効性の
チェックというべきかと。

安全なシステムを構築する為に(今後のために)もう少し詳しく教え
て欲しいと思います。
  //---------------------------------------//
 // Yoshihiro Satoh (ysatoh@xxxxxxxxxxxx) //
//---------------------------------------//