1

リクエスタの IP がすべての Web リクエストを通過することに依存できますか?

asp.net アプリケーションがあり、IP を使用して認証されていない訪問者を識別したいと考えています。空の値を取得しないように、そこに何かがある限り、IP が一意であるかどうかはあまり気にしません。

そうでない場合は、値が空の場合を処理する必要があると思います。

または、IP よりも優れた識別子はありますか?

4

6 に答える 6

3

から入手できます Request.ServerVariables["REMOTE_ADDR"]

防御するのは悪くない。これが設定されていない恐ろしいエラー状態が心配な場合は、そのケースを確認し、それに応じて対処してください。

この値が役に立たない理由はたくさんあります。ローカル ネットワーク上のロード バランサーや SSL デコーダーなど、最後のホップのアドレスしか取得できない場合があります。ISP プロキシ、または一部の会社の NAT ファイアウォールである可能性があります。

その点で、一部のプロキシは、トラフィックを転送している IP を追加の HTTP ヘッダーで提供する場合があります。これは 経由でアクセスできます Request.ServerVariables["HTTP_X_FORWARDED_FOR"]Request.ServerVariables["REMOTE_ADDR"]最初にこれを確認してから、またはにフォールバックすることをお勧めしRequest.UserHostAddressます。

参照/監査のためにこれらのことをログに記録することは、確かに悪い考えではありません。

于 2010-01-02T22:08:51.317 に答える
2

この値はWebサーバーによって設定されていると思います.IPを別のものに設定すると、リクエストへの応答が返されないため、それを偽造する方法は実際にはありません.

心配する必要があるのはプロキシだけです。プロキシからの全員が同じ IP を取得します。

于 2010-01-02T21:58:34.770 に答える
2

Web サーバーが IP ネットワークではない何らかのネットワークでリッスンしていない限り、常に IP アドレスを取得します。ただし、IP アドレスは必ずしもユーザーごとに一意であるとは限りません。

于 2010-01-02T22:01:43.130 に答える
1

Web リクエストは http 接続であり、これは tcp 接続であり、すべての tcp 接続には 2 つのエンドポイントがあります。したがって、それは常に存在します。しかし、それはあなたがそれについて知っているのと同じくらいです。一意でも確実に正確でもありません(すべてのプロキシやものを使用)。

于 2010-01-02T21:55:38.883 に答える
1

はい、すべての要求には IP アドレスが必要ですが、前述のように、一部の ISP はプロキシ、NAT、またはゲートウェイを使用しており、個人のコンピューターを提供しない場合があります。

次のコマンドを使用して、この IP を (c# で) 簡単に取得できます。

文字列 IP = Context.Request.ServerVariables["REMOTE_ADDR"].ToString();

またはasp/vbscriptで

IP = request.servervariables("REMOTE_ADDR")

于 2010-01-02T22:03:48.613 に答える
0

IP アドレスは、ユーザーの識別にはあまり使用されません。すでに述べたように、企業のプロキシやその他のプライベート ネットワークは、単一の IP アドレスとして表示される場合があります。

ユーザーをどのように認証していますか? 通常、ユーザーにログインしてもらい、その状態をアプリのセッションに保存します。

于 2010-01-02T22:01:31.757 に答える