ここの情報は古いです。ご理解頂いた上でお取り扱いください。

Opened 11 years ago

Closed 11 years ago

Last modified 11 years ago

#3061 closed enhancement (fixed)

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

Reported by: ebihara Owned by: 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 (20)

comment:1 Changed 11 years ago by masabon

Owner: changed from nobody to masabon
Status: newassigned

comment:2 Changed 11 years ago by shingo

Owner: changed from masabon to shingo
Status: assignednew

引き継ぎます。

comment:3 Changed 11 years ago by shingo

Status: newassigned

comment:4 Changed 11 years ago by shingo

Description: modified (diff)
Keywords: 確認中 added

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

comment:5 Changed 11 years ago by shingo

Description: modified (diff)

comment:6 Changed 11 years ago by shingo

Keywords: 確認中 removed

comment:7 Changed 11 years ago by shingo

Keywords: 確認中 added

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

comment:8 Changed 11 years ago by ebihara

Keywords: 差し戻し added; 確認中 removed
  • 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情報を破棄」というシンプルな流れにできないでしょうか?

comment:9 Changed 11 years ago by shingo

Description: modified (diff)
Keywords: 確認中 added; 差し戻し removed

以下のリビジョンで 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の機能を分かりやすく変更

comment:10 Changed 11 years ago by ebihara

Keywords: 差し戻し added; 確認中 removed
  • 定数名には「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 オプションは、インスタンス作成時に設定するようにするべきです

comment:11 Changed 11 years ago by ebihara

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

comment:12 Changed 11 years ago by shingo

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

【trunkの修正】

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

comment:13 Changed 11 years ago by shingo

Keywords: 確認中 added; 差し戻し removed

Keywordsを変更しました

comment:14 Changed 11 years ago by ebihara

Version: 2.10.x & 2.12.x & 2.13.x

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

comment:15 Changed 11 years ago by ebihara

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

comment:16 Changed 11 years ago by shingo

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

comment:17 Changed 11 years ago by shingo

Keywords: 確認中 added; 差し戻し removed

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

comment:18 Changed 11 years ago by ebihara

Keywords: テスト待ち added; 確認中 removed

comment:19 Changed 11 years ago by kiwa

Keywords: テスト待ち removed
Resolution: fixed
Status: assignedclosed

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

comment:20 Changed 11 years ago by shingo

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

Note: See TracTickets for help on using tickets.