Ticket #3061 (closed enhancement: fixed)

Opened 9 years ago

Last modified 8 years ago

ログイン成功時に、そのメンバーの既存のセッションをすべて無効化できるようにする

Reported by: ebihara Assigned to: shingo
Priority: major Milestone: OpenPNE2.13.4
Component: 指定しない Version:
Keywords: Cc:

Description (Last modified by shingo)

■概要

認証機能におけるセキュリティ強化の為、ログイン時に発行するセッションIDはユーザに対し1つに制限する。

■仕様

  • 携帯版・PC版を問わず、ログイン中に他の端末・ブラウザからログインした場合(新規にログインIDが発行される場合)、それまでのセッションは破棄される。(管理画面を含む)
  • ログイン時に発行されるセッションIDをDBに保存し、認証を必要とするアクション実行時は常にログイン時のセッションIDと現在のセッションIDの一致を確認し、もし一致しなければログインページへリダイレクトさせる。
  • config.phpで機能の使用を選択でき、切り替えてもログイン状態は保持される

■関連情報

Change History

10/16/08 11:38:48 changed by masabon

  • owner changed from nobody to masabon.
  • status changed from new to assigned.

10/19/08 00:18:20 changed by shingo

  • owner changed from masabon to shingo.
  • status changed from assigned to new.

引き継ぎます。

10/19/08 00:45:00 changed by shingo

  • status changed from new to assigned.

10/19/08 00:56:19 changed by shingo

  • keywords set to 確認中.
  • description changed.

以下のリビジョンで修正しました。ご確認ください。

10/19/08 01:01:58 changed by shingo

  • description changed.

10/20/08 13:43:46 changed by shingo

  • keywords deleted.

10/21/08 11:18:30 changed by shingo

  • keywords set to 確認中.

以下のリビジョンで追加修正しました。ご確認ください。

10/21/08 16:35:15 changed by ebihara

  • keywords changed from 確認中 to 差し戻し.
  • ktai_do_o_easy_login も修正の必要があるのではないでしょうか
  • (single|a|one) session per user という表記がそこそこ使われているようなので、定数名もそれに従った表記にしてみてはどうでしょう?
  • 役割からいって、c_member よりも c_member_secure へのカラム追加が適切かなと思いますがどうでしょうか?
  • 変更が分散してしまうのではっきりとは言いにくいですが、 controller.php よりは各モジュールの auth.inc に記述したほうがわかりやすいかなと思います
  • セッションが無効である場合は、 OpenPNE_Auth::logout() によってログアウトさせてください
  • webapp/lib/controller.php 内で対象とするモジュールを pc, ktai のみにしているようですが、本当にそれで問題がないのでしょうか?
  • db_member_is_one_user_one_session() 内で db_member_update_c_member_sess_id() をコールしているなど、わかりにくい記述が散見されます。「ログイン時にセッションID情報を更新」→「auth.inc でセッションIDをチェック」→「ログアウト時(またはセッションが無効と見なされた場合)にセッションID情報を破棄」というシンプルな流れにできないでしょうか?

10/23/08 19:30:54 changed by shingo

  • keywords changed from 差し戻し to 確認中.
  • description changed.

以下のリビジョンで comment:10 にあげられた事項について修正しました。 ご確認ください。

  【trunkの修正】

  • r8758 :定数名をSESSION_PER_USERに変更
  • r8760 :c_member_secureにsess_idを挿入するように変更
  • r8761 :ktai_do_o_easy_login を修正
  • r8771 :セッションの一致確認を各モジュールの auth.inc に記述
  • r8776 :admin・portalモジュールに対応
  • r8780 :c_admin_userテーブルにsess_idフィールドを追加するsql文を追加
  • r8784 :db_etc_is_check_session_per_userの機能を分かりやすく変更

10/24/08 15:15:45 changed by ebihara

  • keywords changed from 確認中 to 差し戻し.
  • 定数名には「OPENPNE_」というプレフィックスを付けてください
  • ファイル名の変更には svn move コマンドを使ってください
  • db_member_update_c_member_secure_insert_sess_id() は、少なくとも db_member_do_access() の以前に実行するべきです
  • db_etc_is_check_session_per_user() という関数名で、 is_check が不自然です
  • db_etc_is_check_session_per_user() の第二引数 $is_auth は bool 値を期待しているはずですが、実際には OpenPNE_Auth のインスタンスが渡されてしまいます
  • db_etc_is_check_session_per_user() の第二引数 $is_auth は不要ではないでしょうか
  • OpenPNE_Auth::$is_admin オプションは、インスタンス作成時に設定するようにするべきです

10/24/08 15:50:26 changed by ebihara

  • db_etc_is_check_session_per_user() の Docblock 形式コメントが正しくありません
     ログイン時のセッションIDと現在のセッションIDが一致していないことを確認する
    

10/24/08 17:58:38 changed by shingo

以下のリビジョンで comment:10 にあげられた事項について修正しました。 ご確認ください。

 【trunkの修正】

  • r8802 :定数名の変更・関数を分かりやすく変更
  • r8803 :OpenPNE_Authの$is_admin プロパティをインスタンス作成時に設定するように変更

10/24/08 18:56:43 changed by shingo

  • keywords changed from 差し戻し to 確認中.

Keywordsを変更しました

10/26/08 19:14:44 changed by ebihara

  • version deleted.

DB変更が伴うので、開発版の新機能として扱います。

10/28/08 11:34:26 changed by ebihara

  • keywords changed from 確認中 to 差し戻し.
  • OpenPNE_Auth のコンストラクタに対して付けられている Docblock 形式のコメントの内容が古いです
  • webapp/modules/portal/auth.inc に対しても修正の必要があるのではないでしょうか

10/31/08 17:52:14 changed by shingo

以下のリビジョンで不要なアップデートSQLファイルを削除しました

11/04/08 18:05:42 changed by shingo

  • keywords changed from 差し戻し to 確認中.

以下のリビジョンで comment:15 にあげられた事項について修正しました。 ご確認ください。

11/06/08 15:26:20 changed by ebihara

  • keywords changed from 確認中 to テスト待ち.

11/06/08 20:25:17 changed by kiwa

  • keywords deleted.
  • status changed from assigned to closed.
  • resolution set to fixed.

確認しました。問題ありません。

11/12/08 10:42:05 changed by shingo

以下のリビジョンで追加修正しました。