クライアントがサーバーにリクエストを送信し、次に一意のリクエストIDを取得するアプリを作成しています。この一意の要求IDは、後でサーバーと再度対話するときにクライアントを認証するために使用されます。
クライアントの要求には、次の2つのタイプがあります。
- 新しいリクエスト。既存のIDがなく、サーバーからの応答によってIDが生成されて返されます。
- IDを持つ既存のリクエスト。次に、サーバーは、指定されたIDに対するクライアント要求を処理します。
私の問題は、IDをどのように生成するかです。JavaとMySQLサーバーデータベースを使用しています。自動インクリメントされたデータベース生成IDを使用すると、クライアントがIDを推測しやすくなります。別のクライアントは、それらを推測して誤用することにより、悪意を持っていくつかのIDを生成する可能性があります(IDを除いて、クライアント/サーバー間に認証はありません:<)
UUIDまたはその他のランダム化アルゴリズムを使用してランダムIDを生成する場合、データベース全体(数千のレコードが含まれる可能性があります)をチェックして、ランダムIDが実際に一意であるかどうかを実際にチェックして保証する必要がありますか?または、IDが存在し、パフォーマンスの問題が発生しないかどうかをデータベース内ですばやく確認できますか?
どのような対策をとるべきですか?一意のID以外に、クライアントとサーバー間の認証のために、より多くのセキュリティ対策を講じる必要がありますか?