2012-05-13 22 views
4

私はJava EE WebアプリケーションとJava SEアプレットの2つのアプリケーションを持っています。 JSESSIONID(Webアプリケーションによって作成された)を使用して、アプレット内のユーザーを認証します。JSESSIONIDはどこに保存されていますか? (JavaEE)

問題があります。このJSESSIONIDを特定のユーザーに関連付けるにはどうすればいいですか?

このようなJSESSIONIDで表されるユーザーを確認する方法(Webサーバーアプリケーション側で確認する方法)アプレットではクッキーからそれを読んで、このJSESSIONIDをPOSTメッセージとして受け入れる単純なサーブレットを作成したいと思います。その後、私はJSESSIONIDが悪いときには何も答えには書いておらず、JSESSIONIDが良い(つまり誰かを表現している)場合にはユーザー情報を書きたいと思う。

誰でもこれを行う方法を知っていますか?

答えて

10

JSESSIONIDは、通常は気にする必要のない低レベルのメカニズムです。サーバ側では、サーブレットコンテナはJSESSIONIDをサーブレットで利用可能なHttpSessionオブジェクトに透過的に変換します。セッションIDは、CookieヘッダーまたはURLの再書き込みを使用して透過的にサーバーに渡されます。

リンクをクリックするか、ウェブページで通常のフォームを投稿すると、ブラウザは自動的にJSESSIONIDのCookieを渡したり、URLに添付したりします。ハイジャックのユーザーセッションのような - これは、セキュリティ上の理由からJSESSIONIDクッキーを読んでからJavaScriptを防ぐためのものです:JSESSIONIDクッキー(How do you configure HttpOnly cookies in tomcat/java webapps?を参照)への安全なサーブレットコンテナを追加する必要がありHttpOnly属性:

あなたのデザインが大きな欠陥を持っています。あなたのアプレットはそのクッキーを見ないかもしれません!

私はについてよく分かりませんが、何らかの形でセキュリティリクエスト(cookie)が自動的に処理されるように、Webブラウザ経由でHTTPリクエストを実行するようアドバイスします。

3

Java EEコンテナがほとんどの作業を行います。使用する認証方法とコンテナの動作の詳細に応じて、いくつかの短所があります。私は今、それらのショートカットを無視します。

ユーザがログインするときに、セッションを作成して(あるdoe snotがすでに存在する場合)、ユーザ名を追加します(たとえば、その他の詳細など)をセッション属性としてセッションに追加します。

リクエストが届いて既にセッションがある場合は、そのセッションからユーザーの詳細を取得するだけです。コンテナは、リクエスト内のセッションIDを適切なセッションオブジェクトにマッピングし、リクエストで利用できるようにします。

セッションIDが無効な場合、コンテナはセッションオブジェクトを要求に関連付けません。

最後に注意しなければならないのは、HttpOnlyのクッキーです。コンテナは、(XSS攻撃から保護するために)セッションIDにこれらをデフォルトで使用する必要があります。セッションIDをアプレットで使用できるようにするには、セッションCookieのHttpOnly保護を無効にする必要があります。これは、アプリケーションにXSSの脆弱性が存在する場合、攻撃者がユーザーセッションCookieを盗む可能性があることを意味します。

関連する問題