7

Java EE Web アプリケーションと Java SE アプレットの 2 つのアプリケーションがあります。JSESSIONID (Web アプリケーションによって作成される) を使用して、アプレットでユーザーを認証したいと考えています。

問題があります - この JSESSIONID を特定のユーザーに関連付ける方法は?

どのユーザーがそのような JSESSIONID で表されているかを (Web サーバー アプリケーション側で) チェックする方法は? アプレットでは、Cookie から読み取ります。次に、この JSESSIONID を POST メッセージとして受け入れる単純なサーブレットを作成します。その後、JSESSIONID が悪い場合は応答に何も書き込みません。JSESSIONID が良い場合 (つまり、誰かを表している場合) はユーザー情報を書き込みます。

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

4

2 に答える 2

10

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

そのため、リンクをクリックしたり、Web ページに通常のフォームを投稿したりすると、ブラウザーは自動的にJSESSIONIDCookie を渡すか、URL に添付します。

あなたの設計には重大な欠陥があります: 安全なサーブレット コンテナはCookie にHttpOnly属性を追加する必要がありますJSESSIONID(参照: tomcat / Java webapps で HttpOnly Cookie を構成するにはどうすればよいですか? ) これは、JavaScript がJSESSIONIDセキュリティ上の理由で Cookie を読み取れないようにするためです。あなたのアプレットは、その Cookie さえ見ないかもしれません!

についてはよくわかりませんが、セキュリティ ID (Cookie) が自動的に処理されるように、何らかの方法で Web ブラウザー経由で HTTP 要求を実行することをお勧めします。

于 2012-05-13T07:45:01.123 に答える
3

Java EE コンテナーがほとんどの作業を行います。使用する認証方法とコンテナーの動作の詳細に応じて、いくつかのショートカットを使用できます。今のところ、これらのショートカットは無視します。ユーザーは、ログインなどの何らかの形で Web アプリケーションに情報を提供すると想定しています。

ユーザーがログインしたら、セッションを作成し (まだ存在しない場合)、ユーザー名 (および必要なその他の詳細) をセッション属性としてセッションに追加します。

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

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

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

于 2012-05-13T07:50:25.943 に答える