java - verwenden Sie einen filter, um zu überprüfen remote-Adresse
Was wäre der beste Ansatz, um zu erkennen, ob eine web-Anwendung zugegriffen wird, werden lokal?
Ich bin interessiert, bei der Prüfung dieses in einem filter (javax.servlet.Filter
).
Ich könnte prüfen, die ServletRequest#getRemoteAddr()
wenn es 127.0.0.1
aber wenn es läuft in einer IPv6-Maschine, die Adresse wäre 0:0:0:0:0:0:0:1
.
Gibt es irgendwelche Fallstricke, die ich bewusst sein sollten, oder ob ich einfach nur überprüfen, ob diese 2 string-Muster, ich wäre ok?
Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Theorie, das folgende sollte ausreichen.
Update gemäß der Kommentare, die
request.getLocalAddr()
scheint zurück0.0.0.0
was kann in der Tat passieren, wenn der server hinter einem proxy.Können Sie stattdessen wollen, und vergleichen Sie Sie gegen die Adressen als "gelöst", indem
InetAddress
.In meinem Fall, die
localAddresses
enthält die folgenden:request.getLocalAddr()
gibt immer0.0.0.0
Müssen Sie auch prüfen, alle anderen IP-Adressen der box wie eine Ihrer ethernet-Schnittstellen. Berücksichtigen Sie auch Aliase.
127.0.0.1
ist nicht in der Menge!Selbst wenn der client lokal ausgeführt wird, ist es vielleicht nicht über das loopback-interface. Chancen stehen gut, dass Ihr Rechner eine IP-Adresse zugewiesen, und je nach /etc/hosts-Konfiguration, DNS-Konfiguration, etc. die IP-Adresse, die Sie verbinden, vielleicht nicht die loopback-Adresse.
Unter der Annahme, dass Sie wollen, um irgendeine Art von "enahanced" - interface, das ist "sicherer", weil es seinen Ursprung auf der gleichen Maschine, Bedenken Sie, dass auch loopback-Schnittstellen kann der Spieler beobachtet bei mit tools wie wireshark. Wenn dieses interface ist gedacht zur Darstellung der Daten geeignet für eine mehr-vertrauenswürdigen client, dann sind die Chancen gut, dass Sie ergreifen sollten, die Bemühungen zu tun, richtige ssl-tunneling über https.