0

以前のログインが成功したサーバー側でペア (ソース IP、有効なユーザー名) を保存することにより、既知のマシンと未知のマシンを識別できる Web アプリケーションを開発する必要があります。クライアントIPを取得することは可能ですか?

4

2 に答える 2

3

簡単に言えば、常に実際のクライアント IP アドレスを取得できるとは限らないということです。

クライアントが独自の IP アドレスを持っていて、サーバーに直接接続している場合は、それHttpServletRequest.getRemoteAddr()を返す必要があります。でも:

  • クライアントのリクエストがプロキシまたはリバース プロキシ経由でサーバーに到達した場合、getRemoteAddr()は最初のアップストリーム プロキシ アドレスを返します。

  • localhostリクエストがlocalhostから来る場合と同様に、クライアントがサーバーをアドレス指定する場合。

  • クライアントが NAT ゲートウェイまたは IPv4 <-> IPv6 ブリッジの背後にある場合、ゲートウェイまたはブリッジの IP アドレスが表示される可能性があります。

次に、IPアドレスがなりすましの可能性があるという問題があります。

要するに、実際のクライアント IP アドレスを知ることに依存するセキュリティ スキームは、しばしば問題を引き起こします。


問題がリバース プロキシによるものである場合 (127.0.0.1 が表示されている場合は、そのことが暗示されます)、リバース プロキシでリクエスト ヘッダーをリクエストに追加して、どのリモート IP アドレスが表示されたかを示すことができます。次に、サーバーは の代わりにそのヘッダーを使用する必要がありますgetRemoteAddr()。ただし、プロキシが実際のクライアント IP アドレスを認識していない場合は役に立ちません。

于 2013-01-21T09:03:49.587 に答える
0

サーブレットでは、次のようにします。

public class GetAddress extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        String ip = request.getRemoteAddr();
        // now you can check if the ip exists and if not store it or do other usefull stuff ...
    }
}
于 2013-01-21T08:42:25.977 に答える