web-dev-qa-db-ja.com

サーブレットでクライアントを識別する際に、CookieではなくIPアドレスを使用できないのはなぜですか?

IPアドレスを介してCookieを使用することにはいくつかの利点があることはわかっていますが、私の質問は、クライアントがサイトに再度アクセスしたときに、クライアントを識別するときにクライアントのIPアドレスを記憶できないのはなぜですか?コンテナがIPアドレスを使用してクライアントを記憶することは可能ですか?

26
JAVA

クライアントは、CookieとIPアドレスによって識別されます。ただし、IPアドレスを排他的に使用することはできません。

  • 2つのクライアントが同じNATファイアウォールまたはプロキシの背後にある場合はどうなりますか?それらはサーバーに対して同じ外部IPアドレスを持ちます。
  • ユーザーが同じマシンで2つの異なるブラウザーを開いていて、2つの別々のセッションが必要な場合(テスト用か?)
  • ユーザーは、セッション中に変更される可能性がある動的IPアドレスを持っている可能性があります。
  • 攻撃者がIPアドレスのみに依存している場合、IPアドレスを偽装してセッションを乗っ取ることができる可能性があります。

これは、すべての場合において、IPアドレスはクライアントを一意に識別しないことを意味します。

83
user22815

ときどきできるIPアドレスを使用できる

LANを使用している場合、またはIPを静的に単一のクライアントに配信しているユーザーのみを対象にしている場合は、そのアドレスを使用することで問題はありません。

しかし、通常はできません。

パブリックサイトを実行している場合、サーバーにアクセスするIPアドレスのmostは静的または専用ではありません。それらのほとんどは複数のクライアントを表しています。デスクトップ、ラップトップ、携帯電話はすべて、ホームネットワークに接続しているときに同じIPアドレスを介して送信されます。そして、そのIPは変更される可能性があります。

18
svidgen

追加する3つの理由:

  1. マルチユーザーワークステーションとターミナルサーバーが存在します。多くのユーザーは、個別のセッションで完全に独立したブラウザプロセスを実行している可能性があります。
  2. IPアドレスは永続的ではありません。 DHCPリースの期限が切れると、再割り当てされる可能性があります。
  3. アプリケーションはローミングをサポートする必要があります。たとえば、電話を使用しているユーザーがWiFiの範囲から外れ、3G接続に引き渡される可能性があります。 IPアドレスは変更されますが、Webアプリケーションが機能し続けるのはいいことです。
10
200_success

識別子としてIPアドレスを使用することは、IPアドレスが意図するものではないため、一般的にはお勧めできません。機能的には、aからbへのルーティング用のプレーンアドレスであり、aの前またはbの後は何もわかりません。

たとえば、同じIPアドレスが多くのNAT搭載デバイスで共有されている場合があり、最も一般的なケースは

a)プロバイダーが顧客にアドレスのプールを動的に割り当てること。これは、より多くの顧客にサービスを提供できる同数のパブリックアドレスを購入する場合に非常に一般的です(ユーザー全体ではなく、同時ユーザーに十分な数のアドレスが必要です)。

b)単一のアドレスからWebにアクセスするプライベートネットワーク。マシンの場合は内部でパケットを数百または数千にリダイレクトします。

2
Dice9

2つのコンピュータがNATの背後にあり、同じIPアドレスを持っている可能性があることを除けば、クライアントの概念は正しい必要があります。

クライアントは、通信しているコンピューターではなく、そのコンピューターで実行されているブラウザーです。

お使いのブラウザーは、コンピューターが持っているIPアドレスをあまり気にしませんが、オペレーティングシステムは気にしません。そして、それがIPアドレスに依存できない理由です。ブラウザはCookieを考慮し、Cookieはブラウザの制御下にあります。そのため、セッションにCookieを使用します。

1
Pieter B