2008-09-05 12 views
1

Ich habe eine Webanwendung, die sich für interne Benutzer anders als externe verhalten sollte. Die Webanwendung ist über das Internet und somit selbstverständlich auch für die internen Benutzer verfügbar.Wie bekomme ich Browser-IP oder Hostname?

Alle Benutzer sind anonym, nicht authentifiziert, aber die Seite sollte für interne Benutzer anders als extern rendern. Was ich in meinem Code mache, ist die Verwendung Request.UserHostName und dann Dns.GetHostEntry. Das Ergebnis wird dann mit einer Einstellung in meiner web.config verglichen (die so etwas wie *.mydomain.local enthält). Wenn der Vergleich ein positives Ergebnis ergibt, rendere ich den HTML-Code, den der interne Benutzer sehen sollte, ansonsten rendere ich den HTML-Code, den der externe Benutzer sehen sollte.

Mein Problem ist jedoch, dass ich nicht immer den erwarteten Wert von Request.UserHostName bekomme. auf der Entwicklungsseite bekomme ich die IP-number (?) der Maschine mit dem Browser, aber auf der Kundenseite bekomme ich nicht die IP-number des Benutzers Maschine, ich bekomme einige andere IP-number. Die Browser haben keine Proxies oder ähnliches.

Sollte ich etwas anderes als Request.UserHostName verwenden?

Antwort

3

Ich empfehle die Verwendung von IP-Adressen. Ich habe gerade mit genau dieser Situation zu tun, indem ich gerade ein Authentifizierungssystem einrichte, und die von Epso und Robin M beschriebenen Bedingungen sind genau das, was passiert. Externe Benutzer, die auf die Seite kommen, geben mir ihre tatsächliche IP-Adresse, während alle internen Benutzer die IP des Gateway-Rechners (Routers) in dem privaten Subnetz bereitstellen, auf dem die Webserver sitzen.

Um damit umzugehen, überprüfe ich nur für diese eine IP. Wenn ich die IP des Gateways erhalte, stelle ich den internen Zugriff zur Verfügung. Wenn ich etwas anderes bekomme, bekommen sie das externe, das in meinem Fall eine zusätzliche Authentifizierung erfordert. In Ihrem Fall würde es nur eine andere Schnittstelle bedeuten.

0

Möglicherweise gibt es eine Firewall, die irgendeine Art von NAT durchführt, um innerhalb von Clients zu ermöglichen, den externen DNS-Namen zu verwenden, um den Server zu erreichen.

Ist die IP-Nummer, die Sie am Kundenstandort erhalten, gleich auf der externen Kundenserver-IP? In diesem Fall können Sie für diese eine IP-Adresse fest codieren. Alle internen Computer hinter dieser Firewall haben scheinbar dieselbe IP-Adresse und Sie können sie als "intern" klassifizieren.

0

Es sieht so aus, als würden Sie eine öffentlich zugängliche IP-Adresse zurückgeben. Lassen Sie den Benutzer zu http://www.myipaddress.com gehen. Wenn dies der IP-Adresse entspricht, die an Ihre Software zurückgegeben wird, ist dies definitiv der Fall.

Die einzige Lösung, die ich sehen kann, um dies zu umgehen, ist, sie entweder zu verbinden, um die Maschine mit der asp.net-Anwendung über ein VPN zu verbinden, oder eine andere Art der Authentifizierung zu verwenden. Letzteres ist wahrscheinlich die beste Option.

2

Versuchen Sie Request.UserHostAddress, die die IP-Adresse des Clients zurückgibt. Angenommen, Ihr internes Netzwerk verwendet IP-Adressen, die für LANs reserviert sind, sollte es relativ einfach sein zu überprüfen, ob eine IP intern oder extern ist.

0

Es hört sich an, als gäbe es einen Proxy zwischen Benutzern und dem Server auf der Kundenseite (es muss nicht im Browser konfiguriert werden). Abhängig von Ihrer Netzwerkkonfiguration kann es sich um einen internen oder externen Proxy handeln.

Ich würde vermeiden, den UserHostName für das zu verwenden, was effektiv Authentifizierung ist, wie es vom Browser duting die Anfrage präsentiert wird und leicht zu verfälschen wäre. Die IP-Adresse wäre viel effektiver, da es schwierig ist, eine IP-Adresse in einer TCP/IP-Verbindung zu fälschen (und eine Verbindung aufrecht zu erhalten). Es ist immer noch schwach Authentifizierung, kann aber in diesem Szenario ausreichen.

Auch wenn Sie eine IP-Adresse verwenden und ein NAT-Proxy zwischen Client und Server besteht, müssen Sie möglicherweise akzeptieren, dass alles, das über diesen Proxy kommt, vertrauenswürdig ist (ich gehe davon aus, dass externe/nicht vertrauenswürdige Clients nicht durchkommen) dieser Proxy).

Wenn das nicht akzeptabel ist, sind Sie zurück zu anderen Methoden der Authentifizierung. Anstatt eine Anmeldung oder eine VPN-Verbindung zu erfordern, könnten Sie einen permanenten Cookie oder Client-Zertifikate in Erwägung ziehen und diese nur an interne Clients weitergeben, aber Sie müssten diese auf dem Client bereitstellen. Sie könnten sicherlich einen dauerhaften Cookie basierend auf einer einmaligen Anmeldung liefern.Cookies können auf ähnliche Weise gefälscht werden, da der UserHostName eine bessere Möglichkeit bietet, einen Cookie-Wert zu erstellen, der weniger rätselhaft ist als ein Domain-Name.

Verwandte Themen