PHP die meisten korrekte / sichere Weg, um Reale Benutzer-IP-Adresse in 2017
Was ist der Genaueste Weg, um Nutzer-IP-Adresse in 2017 über PHP?
Ich habe gelesen, viele Fragen und Antworten darüber, aber die meisten Antworten sind alte und kommentiert von Benutzern, die diese Möglichkeiten zu unsicher sind.
Nehmen wir zum Beispiel einen Blick auf diese Frage (2011): Wie bekomme ich die client-IP-Adresse in PHP?
Tim Kennedy Antwort enthält eine Empfehlung, etwas zu verwenden, wie:
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
Aber ich habe viel gelesen, ich habe gesehen, dass die Verwendung von X_FORWARDED_FOR
unsicher ist, wie der Kommentar unten highlights:
NICHT mit dem obigen code, es sei denn, Sie wissen GENAU, was Sie tut! Ich habe
gesehen MASSIVE Sicherheitslücken aufgrund dieser. Die Kunden können die
X-Forwarded-For oder die Client-IP-header zu jedem beliebigen Wert
will. Es sei denn, Sie haben einen vertrauenswürdigen reverse-proxy, Sie sollten keine
solche Werte.
Da ich nicht GENAU weiß, was es tut, ich will nicht das Risiko auf sich nehmen. Er sagte, es sei unsicher, aber nicht bieten eine sichere Methode, um Nutzer-IP-Adresse.
Dann habe ich versucht die einfache $_SERVER['REMOTE_ADDR'];
, aber dieser liefert die falsche IP. Ich habe getestet, und meine echte IP folgt diesem Muster: 78.57.xxx.xxx
, aber ich bekomme eine IP-Adresse wie: 81.7.xxx.xxx
Also, habt Ihr irgendwelche Ideen?
- 81.7.xxx.xxx ... seine eigene Öffentliche Ip ... und 78.57.xxx.xxx Ihr Eure pc ip.
- google.co.in/...
- also ja, meine IP ist wie 78.57...., aber
$_SERVER['REMOTE_ADDR'];
resturns mich wie81.7.....
- $_SERVER['REMOTE_HOST'] .... versuchen Sie, diese ... was Sie bekommen
- Vor der Verwendung von IPs für alles, was Sie sollten wirklich wissen, was Sie sind und wie IP-Netzwerke arbeiten. IPs sind nur ein Implementierungsdetail von Daten-transport-Mechanismus (TCP/IP). Es muss nicht unbedingt geben Ihnen nützliche Informationen über einige Details, wie die Daten der aktuellen Anfrage wurde transportiert auf Ihren server. Nur wenn Sie verstehen, dass sollten Sie prüfen, unter Verwendung IPs für andere Zwecke.
- Gut würden Sie bitten, das Gerät selbst und hoffentlich wird es Ihnen sagen.
- Sorry, die Nachrichten brechen, um Sie. Nichts hat sich geändert, die das Internet bewusst ist. Jedoch können Sie immer verwenden einige algorithmen, um festzustellen, ob der Benutzer wird liegend oder hinter einem Proxy. z.B. Gebietsschema Stimmen nicht überein
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kurze Antwort:
$ip = $_SERVER['REMOTE_ADDR'];
Als der 2019
$_SERVER['REMOTE_ADDR'];
ist die einzige zuverlässige Weg, um Benutzer von ip-Adresse, aber es kann zeigen fehlerhafte Ergebnisse, wenn hinter einem proxy-server.Alle anderen Lösungen bedeuten Sicherheitsrisiken oder kann leicht gefälscht.
$_SERVER['REMOTE_ADDR']
Rücksendung der proxy-IP ist nicht verkehrt oder falsch, nur nicht das, was Sie wirklich von ihm wollen.Aus einer Sicherheit POV, nichts aber
$_SERVER['REMOTE_ADDR']
zuverlässig - das ist die simple Wahrheit, leider.Alle Variablen mit einem Präfix
HTTP_
sind in der Tat die HTTP-Header, die vom client gesendet, und dort ist keine andere Weise zu übertragen, dass Informationen während Anfragen durch verschiedene Server.Aber natürlich automatisch bedeutet, dass die Kunden austricksen können diese Header.
Können Sie nie, nie Vertrauen der Kunden.
Es sei denn, es ist Sie ... Wenn Sie Kontrolle der proxy oder einen load-balancer, ist es möglich, konfigurieren Sie es so, dass es fällt solchen Header aus der ursprünglichen Anfrage.
Dann, und nur dann, könnten Sie Vertrauen in eine z.B.
X-Client-IP
header, aber wirklich, es gibt keine Notwendigkeit, an diesem Punkt ... der webserver kann so konfiguriert werden, ersetzenREMOTE_ADDR
mit diesem Wert und der gesamte Prozess wird transparent für Sie.Dies immer der Fall sein wird, egal in welchem Jahr wir sind ... für alles rund um Sicherheit - Vertrauen nur
REMOTE_ADDR
.Best-case-Szenario ist zu Lesen, die
HTTP_
Daten für statistischen Zwecken nur, und selbst dann - stellen Sie sicher, dass die Eingangsspannung ist mindestens eine gültige IP-Adresse.'HTTP_X_FORWARDED..
auf die Datenbank, die jeder sagt, dass Es unsicher und manipuliert werden können. Also, Wenn Benutzer ändernHTTP_X...
Wert wie'
oder so etwas, Es könnte sein, SQL Injiziert?filter_var()
undFILTER_VALIDATE_IP
.Haben Sie die Zusammenarbeit mit sysops team (oder, wenn du trägst diesen Hut zu, Sie müssen etwas Forschung zu tun). Die header-check wird verwendet, wenn Ihre Netzwerk-Infrastruktur konfiguriert ist, in gewisser Weise, wo der remote requester einem Ihrer Netzwerk-Geräte anstelle der Ende
user.
Diese Art der Sache passiert, wenn Ihr web-server(s) sitzen hinter einem load balancer oder firewall oder einem anderen Gerät, die Bedürfnisse zu befragen, die Nutzlast ordnungsgemäß zu behandeln. Ein Beispiel ist, wenn ein load-balancer beendet ssl und leitet die Anfrage an den web-server ohne ssl. Wenn in diesem Fall die remote-Adresse wird die load-balancer. Es passiert auch mit firewall-appliances, die das gleiche tun.
Den meisten Fällen wird das Gerät anbieten Konfiguration ein Headerwert in der Anforderung mit der original-remote-ip-Adresse. Der header ist in der Regel, was Sie erwarten würden, aber es können in manchen Fällen unterschiedlich sein oder sogar konfigurierbar.
Was mehr ist, abhängig von Ihrer Webserver-Konfiguration (apache, nginx oder andere) möglicherweise nicht unterstützt oder ist aktuell so konfiguriert, unterstützen bestimmte benutzerdefinierte Header wie die gemeinsame ip-header.
Dem Punkt ist uns, dass Sie überprüfen müssen, Ihre Netzwerk-Konfiguration, um sicherzustellen, dass die Originale requester-ip macht es den ganzen Weg durch den code der Anwendung und in welcher form.
Wenn Sie möchten, verwenden Sie eine vorgefertigte Bibliothek, die Sie verwenden können,Peitsche.
Nutzung von vorgefertigten Bibliotheken sind in der Regel besser, weil die meisten von Ihnen wurden gründlich überprüft von einer aktiven community. Einige von Ihnen, insbesondere diejenigen, die herum für eine lange Zeit, haben mehr features eingebaut.
Aber wenn Sie wollen, um code es selbst zu lernen, das Konzept, dann ist es ok, denke ich. Ich empfehle die Verpackung es als stand-alone-Bibliothek und einer Freigabe als open source 🙂
EDIT: ich empfehle nicht, mithilfe der remote-IP-Adresse in security-Mechanismen, wie Sie sind nicht immer zuverlässig.
Erstens, es ist unmöglich, zuverlässig festzustellen, jemand der Quell-IP-Adresse, wenn Sie absichtlich versteckt. Auch etwas, das heute scheint narrensicher, wird bald eine Lücke (wenn es nicht bereits). Als solche, jede Antwort, die weiter unten betrachtet werden sollte nicht VERTRAUENSWÜRDIGEN, was bedeutet, dass, wenn Sie setzen alle Ihre Eier in diesen Korb, bereit sein, für jemanden, der es nutzen oder es zu umgehen irgendwie.
Werde ich nicht in all den Möglichkeiten, jemandem umgehen können IP-tracking, weil
es wird ständig weiterentwickelt. Was ich sagen will, ist, dass es ein nützliches Werkzeug für die Anmeldung, solange Sie wissen, dass die IP-Adressen können leicht ändern oder anders maskiert werden.
Nun, ein großer Punkt ist, dass es einen Unterschied zwischen einer öffentlichen IP-Adresse und eine private IP-Adresse. In IPV4-Router sind in der Regel vergeben öffentliche IP-Adresse, die einem server-Seite Sprache kann tatsächlich greifen, weil Sie nicht sehen, Ihre client-seitige IP-Adresse. Auf einem server, nicht auf Ihrem computer existieren, da ein web-space. Stattdessen ist der router alles, was zählt. Wiederum ist der router die einzige Sache, die kümmert sich um Ihre computer, und es weist eine private IP-Adresse (zu denen Ihr 172...* Adresse gehört) um diese Arbeit zu machen. Das ist gut für Sie, denn Sie können nicht direkt auf einem computer hinter einem router.
Wenn Sie wollen, Zugang zu einer privaten IP-Adresse verwenden, benötigen Sie JavaScript (client-side-Sprache). Sie können dann speichern Sie die Daten asynchron per AJAX. Soweit ich weiß, ist dies derzeit nur möglich mit WebRTC-fähigen Chrome und Firefox. Sehen hier für eine demo.
Getestet habe ich diese und es gibt private IP-Adressen. In der Regel ich denke, dies wird von Werbetreibenden zu verfolgen, einzelnen Benutzern in einem Netzwerk, in Verbindung mit der öffentlichen IP-Adresse. Ich bin sicher, dass wird es schnell nutzlos, da die Leute kommen mit workarounds oder öffentlichen aufschrei Kräfte, die Ihnen die Möglichkeit bieten, zu deaktivieren WebRTC-API. Aber zur Zeit funktioniert es für alle, die JavaScript aktiviert ist auf Chrome und Firefox.
Mehr Lesen:
Als die wahre Methode ist, zu überprüfen, Benutzer-IP ist
$ip = $_SERVER['REMOTE_ADDR'];
Wenn der Benutzer über VPN oder irgendwelche proxy-dann wird es nicht erkennen, die ursprüngliche IP.
Bekommen Client-IP-Adresse:
Beispiel : https://www.virendrachandak.com/demos/getting-real-client-ip-address-in-php.php
Seine Show Ihre Lokale Ip -:
Wie ... 78.57.xxx.xxx
Wie über diese ein -
Verwende ich diesen code, und es funktioniert für mich. Werfen Sie einen Blick auf es.
Hier, ein funktionierendes Beispiel. Hoffe, es hilft!