2

ユーザーがログインして自分のプロファイルと対話する GWT アプリケーションを作成しています。各フォーム エントリをサーバーで検証する必要があることは理解していますが、ユーザーがログインした後の潜在的なセキュリティの問題についてはわかりません。

説明させてください。私のアプリケーション(関連部分)は次のように機能します:

1 - ユーザーが電子メール/パスを入力します
2 - この情報がサーバーに送り返され、DB が照会され、パスワードがチェックされます (ソルト化およびハッシュ化されます)
3. パスワードが電子メールに関連付けられたプロファイルと一致する場合、これは考慮されます成功

プロファイル ID をクライアントに戻しても安全かどうかはわかりません。これを使用して、プロファイル ページに表示されるユーザーに関連する情報を DB に照会します。

潜在的なユーザーがこのプロファイル ID を手動で提供し、その方法でプロファイルをロードする可能性はありますか? 私の懸念は、悪意のある誰かがプロファイル ID の形式を知っていれば、資格情報を提供せずに DB から任意の量の情報をロードできることです。

-ニック

4

4 に答える 4

3

ここで扱っているのは、セッション管理の問題です。理想的には、ログインしているユーザーを (セッション キーとしてランダムな値を使用して) 追跡し、ユーザーがアイドル状態であった時間を把握し、ユーザーがサイトを使用しているときにセッションを延長し、セッションを期限切れにする方法が必要です。

プロファイル ID をクライアントに渡すだけでは、要求ごとにそれを送り返すだけでは十分ではありません。あなたの懸念は正しいです。

有効期限のあるセッションのリストをデータベースに保持したいと考えています。ユーザー許可を必要とするアクションが実行されるたびに (これはほとんどすべてのことであるはずです)、セッションがまだ有効かどうかを確認し、有効である場合は、必要なだけ延長します。有効期限が切れている場合は、セッションを完全に終了し、ユーザーをログアウトします。

セッション キーを Cookie に保存できます (ある時点でクライアントを信頼する必要があります)。

于 2012-12-27T20:40:07.803 に答える
0

Stefan H.が言ったように、ユーザーをログインしているので、セッション(PHP、.Net、JAVAなど)をサポートするバックエンドを使用している必要があります。つまり、単純なID置換により、別のユーザーのアカウントへのフルアクセスが許可される可能性があるため、クライアント側でIDを保持しないでください(もちろん、クライアントで公開する機能によって異なります)。

ログインしたユーザーの機密情報(または管理者アクション)を取得するサーバー要求は、getMyCreditCard()、setMyCreditCard()などのようになります(一意のIDは渡されないことに注意してください)。

于 2012-12-27T21:09:57.860 に答える
0

ルール 1 - Avoid cooking up your own security solution and use existing tested approaches.

ルール 2 - サーバー側が Java の場合、jsessionid の方針に沿って考える必要があります。Spring Security は、追加のセキュリティ機能を使用してセッション ID を管理するための良い出発点を提供します。PHP全体にも同様の既存のフレームワークがあります(質問にサーバー側の言語タグはありませんでした)。

ルール 3 - GWT を使用すると、Google チーム ドキュメントで JavaScript ベースのセキュリティ問題に遭遇し、XSRF および XSS セキュリティ防止手順を提案します。参照 - https://developers.google.com/web-toolkit/articles/security_for_gwt_applications

于 2012-12-28T03:34:28.143 に答える
0

潜在的なユーザーがこのプロファイル ID を手動で提供し、その方法でプロファイルをロードする可能性はありますか? 私の懸念は、悪意のある誰かがプロファイル ID の形式を知っていれば、資格情報を提供せずに DB から任意の量の情報をロードできることです。

Stefan H は、セッション キーが推測不可能修正不可能な場合、セッション管理によってこれを解決できることは正しいです。

これを解決する別の方法は、暗号プリミティブを使用して ID の改ざんを防ぐことです。

たとえば、秘密鍵をサーバーに保存し、それを使用してプロファイル IDに署名できます。後続のリクエストでは、プロファイル ID が署名チェックに合格した場合、サーバーはそのプロファイル ID を信頼できます。

于 2012-12-27T21:55:27.073 に答える