- PR -

明示的にログアウトしなければセッションは継続する

投稿者投稿内容
Ichiro
会議室デビュー日: 2001/08/09
投稿数: 9
お住まい・勤務地: 広島
投稿日時: 2001-09-25 21:54
 相変わらず超初心者的な疑問で恐縮なのですが...。

 ログイン認証を必要とするWebアプリを開発中です。
 @ITの「Java Solution」でも連載記事やFAQでおなじみの、HttpSessionを利用してセッション管理をしようとしています。

 この場合、ユーザが明示的にログアウトしなければ、セッションタイムアウトになるまで、セッションは継続したままとなります。

 で、このシステムでは、トップページから特定のメニューを選択すると、ログイン画面を表示し、ユーザ認証を行うようになっています。
 現在は総合テスト工程に入り、発注側担当者の操作による検証を行っているのですが、次のような指摘を受けました。

 「ログイン後、ログアウトせずにトップメニューに戻り、ログインが必要なメニューで別のユーザとしてログインしようとしたが、ログイン画面が出ないどころか、さっきログインした別のユーザの情報が見えてしまう。これではセキュリティ上問題がある。」

 ここで、ログインを要するメニューは複数あり、同一ユーザが使用する場合は再ログインを不要としたい旨の発注側の要求から、トップページ表示時点でセッション情報を破棄することはできません。

 したがって、発注側担当者のご指摘の現象が発生するのは当然であり、ログアウトせずに別のユーザが利用すること自体がそもそもの誤りのような気がします。
 現時点での私の知識では、「当たり前です」と片づけるしかない状況なのですが、何か良いお知恵をお持ちの方がいらっしゃいましたらご教示願います。
H2
ぬし
会議室デビュー日: 2001/09/06
投稿数: 586
お住まい・勤務地: 港
投稿日時: 2001-09-25 22:45
セッション管理のことはあまり詳しくないのですが、setAttribute()getAttribute()メソッドを使ってどのログイン画面で認証を行なったかの情報をSessionオブジェクトに入れてはどうでしょうか。Sessionオブジェクト内の情報を見て、認証済みのログイン画面ではセッションを継続し、認証をしていないログイン画面であればセッションを破棄するということはできませんか?見当違いであればごめんなさい。

ログアウトしないで別のユーザーが使うというのは運用の問題という感じもしなくもないのですが、それは言わない約束でしょうか?

ではがんばってください
Ichiro
会議室デビュー日: 2001/08/09
投稿数: 9
お住まい・勤務地: 広島
投稿日時: 2001-09-25 23:15
 H2さん、いつもすばやいレスをありがとうございます。頼りにしています。

引用:

H2さんの書き込み (2001-09-25 22:45) より:
セッション管理のことはあまり詳しくないのですが、setAttribute()getAttribute()メソッドを使ってどのログイン画面で認証を行なったかの情報をSessionオブジェクトに入れてはどうでしょうか。Sessionオブジェクト内の情報を見て、認証済みのログイン画面ではセッションを継続し、認証をしていないログイン画面であればセッションを破棄するということはできませんか?見当違いであればごめんなさい。



 ユーザの要求をもう少し具体的に書きます。
 トップページからは5つのメニュー(A〜E)を選択でき、A〜Cは認証不要、D、Eはログインが必要です。
 ここでユーザが、トップページ→D→トップページ→A→トップページ→E という風に遷移していった場合、最後のメニューEへの遷移時には、既にその前のメニューD遷移時にログイン済みであるので、ログイン不要にしなければなりません。

 これを実現するには、H2さんがご教示くださった方法ではできないと考えます。

引用:

H2さんの書き込み (2001-09-25 22:45) より:
ログアウトしないで別のユーザーが使うというのは運用の問題という感じもしなくもないのですが、それは言わない約束でしょうか?



 そうですよねぇ。
 ユーザは、先ほどの同一利用者のログイン継続要求の一方で、ブラウザを使用するユーザが変わった場合、たとえば上記の例でメニューA遷移後に別のユーザが操作を始めたら、メニューEへの遷移時にはログイン画面を出してほしいと言っています(メニューDでのログイン時とユーザが異なるので)。
 システム側から見れば、ログアウトせすに途中で利用者が入れ替わったなんて、どうやっても認識できないと思います。

 今回のシステムの場合、ユーザ企業の社内向けシステムではなく、ユーザ企業の顧客(一般誌消費者)向けシステムであり、同一PC上で異なる利用者がサービスを利用する可能性はほとんどないように思います。
 そういう意味からも、「当たり前です」と片づけたい思いが募るばかりなのですが...。

 「いやいやそうじゃない。こうすればいいんじゃないの」って方がいらっしゃったらよろしくお願いします。
おがわ
大ベテラン
会議室デビュー日: 2001/08/01
投稿数: 199
お住まい・勤務地: 千葉県
投稿日時: 2001-09-26 00:16
> 「ログイン後、ログアウトせずにトップメニューに戻り、
> ログインが必要なメニューで別のユーザとしてログインしようとしたが、
> ログイン画面が出ないどころか、さっきログインした別のユーザの情報が見えてしまう。
> これではセキュリティ上問題がある。」
ここが、Cookieを使ったSession管理の落とし穴ですね。

1台のクライアントPC上で、複数のユーザが同時に使用するという要件を満たすとなると、
HttpSessionだけを利用した認証方法では、確実に無理っぽいです。

HTTP規格には「基本認証」という機能が定義されています。
こちらを利用するのが、得策かもしれません。

[ メッセージ編集済み 編集者: 謎の白覆面 編集日時 2001-09-26 14:31 ]
greentea
会議室デビュー日: 2001/08/31
投稿数: 3
投稿日時: 2001-09-26 11:34
そもそも、
クライアントマシンをログアウトせずに席を離れる事が
セキュリティー的にはまずいのでは?

多少面倒でも、ログアウトしてからオペレータ交代
してもらうしかないですよね。

「違うユーザーに替わった」なんてのはPCには分かりませんからね。
やりたかったらUNIXかNTにして、席を立つときはログアウト(ログオフ)
でしょ。普通。

おそらく別の要求から蹴られそうですが....
二天
ベテラン
会議室デビュー日: 2001/09/26
投稿数: 60
投稿日時: 2001-09-26 12:10
HttpSessionの取得方法にも関係する場合もありますが、状況を聞く限りブラウザのキャッシュにページの情報が残っているだけのように思えます。
2回目のログイン前にブラウザのキャッシュをクリアしてからログインさせてみた場合はどうでしょうか?
二天
ベテラン
会議室デビュー日: 2001/09/26
投稿数: 60
投稿日時: 2001-09-26 12:43
引用:

二天さんの書き込み (2001-09-26 12:10) より:
HttpSessionの取得方法にも関係する場合もありますが、状況を聞く限りブラウザのキャッシュにページの情報が残っているだけのように思えます。
2回目のログイン前にブラウザのキャッシュをクリアしてからログインさせてみた場合はどうでしょうか?


良く見直したら「ログイン画面が出ないどころか」ということなので上記の投稿内容は間違いでした。
しょむ
ぬし
会議室デビュー日: 2001/09/06
投稿数: 430
投稿日時: 2001-09-28 19:31
要求仕様上、絶対に無理です。
クッキーを使うとかそういう問題ではなく、本質的に。
まさにおっしゃる通り、「ユーザが代わったことをユーザに知らせる方法がなければならない」でしょ。この要求仕様だと、明示的なログアウト処理もしくはセッションタイムアウトがそれを実行する以外に、契機がないじゃないですか。

# 端末にカメラでも付けて、顔認証します?:)

お客さんが納得しないなら、「別の端末ならだいじょうぶですから」と言って試せばいいんじゃないでしょうか。このケースの場合。

スキルアップ/キャリアアップ(JOB@IT)