クライアントが Cookie をブロックしているときにセッション状態を維持する提案された方法を使用して、セキュリティ上の欠陥があるかどうかを判断しようとしています。
通常、クライアントのCookieにUUIDを保存し、UUIDがデータベースに保存されているものと一致する場合は自動ログインします。ただし、クライアントで Cookie がブロックされている場合、マシンの UUID にアクセスできないため、IP アドレスを使用して解決し、その方法でデータベースと照合する必要があります。
以下を使用して IP アドレスを決定します。
String ip = request.getHeader("X-FORWARDED-FOR");
if(ip == null) {
ip = request.getRemoteAddr();
}
私はこの分野では少し緑ですが、このアプローチにはセキュリティ上の欠陥があるかもしれないと思います。たとえば、ユーザーがパブリック Wi-Fi ネットワーク (喫茶店、空港、ホテルなど) でアプリケーションにアクセスすると、パブリック IP が保存され、ユーザーのアカウントがその IP に一致します。同じ IP で彼らの背後にいる人は、特にログアウトすることを忘れない限り、アカウントに完全にアクセスできます。これを防ぐにはどうすればよいですか?私は、IP に一致する以外に Cookie がブロックされている場合に、別のアプローチを使用することに完全に反対しているわけではありません。クッキーが利用できない場合にユーザーのログインを完全に禁止する以外に、他のアプローチが何であるかはわかりません。本当に安全な方法はこれだけですか?
アップデート
TJ Crowders のコメントに基づくと、最近の統計によると、実際にユーザーの 2% が Cookie をブロックしています。私はいくつかの理由で Cookie に依存することを選択し、Cookie がブロックされているためにセッション状態を管理できない場合に警告を表示します。