[Tep-j-general] Re: セッションハイジャック対策(Recreate Session)

Back to archive index

Katsunori IMAI imai****@glatt*****
2004年 5月 7日 (金) 15:36:37 JST


田村さん、こんにちは。
今井と申します。

osCommerceの日本語化など、いつもありがとうございます。

以前MLに流されていたセッションハイジャック対策に関し、
Recreate Sessionのソースを持ってきて見てみたのですが、
気になることがありましたので、メールさせていただきます。


https:に切り替えるところ(たとえばログイン)で新たにとっ
たsidを、http:(たとえばカタログページ)でもそのまま使っ
ているので、
結局セキュアにしたいページで使われているsidがSSLを使用せ
ずに流れてしまい、セッションハイジャック対策にはなってな
いのではないでしょうか?

例えばログイン後の、画面のナビゲータ部分
トップ >> カタログ
のカタログのリンクは、http: で、そのURLにかかれている
osCsidは、ログイン時に新しくふられたものです。http: になっ
ているということは、ここをクリックすると暗号化されずにそ
のURLがながれるので、sidを盗むことは可能です。
このsidをつかって、他のブラウザで

https://foo.bar.baz/catalog/account.php?osCsid=盗んだsid

でアクセスすれば、(そのsidがサーバで有効な間は)ログイ
ンすることなくその人のアカウント情報が見れてしまいます。

この例は、URL上にsidがある例ですが、クッキーもセキュアクッ
キーになっていないので、URL上にない場合でもsidは暗号化さ
れずに流れています。

セッションハイジャック対策をするには、
SSL用のsidは、非SSLのときにはURL上にもHTMLヘッダ(cookie
)にもHTML本文にも一切現れないようにして、sidをSSL用、非
SSL用で完全に分けないと、セッションハイジャック対策には
ならないと思います。(結構大変なはずです。^^;)

(ご参考)
http://www.ipa.go.jp/security/ciadr/20030808cookie-secure.html


On Mon, 26 Apr 2004 10:21:41 +0900
TAMURA Toshihiko <tamur****@bitsc*****> wrote:

> こんにちは、田村です。
> 
> osCommerceで運用しているサイトに、
> 外部のサイトからセッションIDの付いたURLでリンクされると、
> そこからやってきたユーザのセッションが区別できなくなって、
> 他人の名前やショッピングカートが見えてしまう場合があります。
> 
> 対策としては、session.referer_check の設定を利用するのが
> 簡単で効果があります。
> ただ、ページビューの多いサイトでは、それでも防ぎきることが
> できませんので、MS2以降で組み込まれた(?) `Recreate Session'を
> MS1日本語版に組み込みました。
> 
> # `Recreate Session'はMS2では実際には動く状態になっていません。
> 
> この変更は実サイトでもテストしているので大きな問題はないと
> 思いますが、何かお気づきの点がありましたら教えてください。
> 
> 
> (参考) session.referer_check
> http://jp.php.net/manual/ja/ref.session.php
> 
> ------------------------------------------------------------
> ●現象
> osCommerce において、BBSや検索サイトの検索結果から`osCsid=...'と
> いったセッションID付きURLでサイトを訪れる場合がある。
> 現在、この現象を確認している検索エンジンには MSN がある。
> 
> これにより、同じセッションIDを持ったユーザが複数存在することになり、
> いわゆるセッションハイジャックの状態となる。
> 
> ●対策1
> php.ini の設定 session.referer_check は有効。
> しかし、Mac のブラウザ Safari は外部サイトの HTTP_REFERER を
> 返さないので、session.referer_check では解決できない。
> 
> ●対策2
> ログイン時にセッションIDを付け替える(Recreate Session)。
> 
> ●その他
> Contributions: spiderkiller
> http://www.oscommerce.com/community/contributions,1089
> ロボットのアクセス時にセッションIDを付加しない。
> 少し処理は重い。
> 
> ------------------------------------------------------------
> Recreate Session に関する変更点
> 
> ●変更したファイル(Recreate Session):
> http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/tep-j/oscommerce-2.2ms1j/
> からダウンロードできます。
>   catalog/create_account_process.php
>   catalog/login.php
>   catalog/includes/functions/html_output.php
>   catalog/includes/functions/sessions.php
>   catalog/install/oscommerce.sql
> 
> ●追加する必要のあるSQL
> INSERT INTO configuration_group VALUES ('15', 'セッション',
> 'セッション制御に関するオプション', '15', '1');
> 
> INSERT INTO configuration (configuration_title, configuration_key,
> configuration_value, configuration_description, configuration_group_id,
> sort_order, set_function, date_added) VALUES ('セッションの再生成',
> 'SESSION_RECREATE', 'False',
> '顧客のログオンまたはアカウント作成のときに,新しいセッションIDをつけるた
> めにセッションを再生成します. (PHP >=4.1 needed).', '15', '7',
> 'tep_cfg_select_option(array(\'True\', \'False\'), ', now());
> 
> ●管理画面での設定
> [基本設定]-[セッション]-[セッションの再生成]を`True'にセットする。
> ------------------------------------------------------------
> 
> -- 
> 田村敏彦 / 株式会社ビットスコープ
> E-mail:tamur****@bitsc*****
> http://www.bitscope.co.jp/
> 
> 
> 
> _______________________________________________
> Tep-j-general mailing list
> Tep-j****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/tep-j-general





Tep-j-general メーリングリストの案内
Back to archive index