Ich habe ein einfaches Skript, das die IP-Adresse des Benutzers bestimmt:
%Vor%Jetzt irgendwo im Internet habe ich jemanden gesehen, der dieses Skript benutzt:
%Vor% Ich habe mich gefragt, ob meine Implementierung unterbrochen ist. Muss ich überprüfen, ob der Wert von $_SERVER['HTTP_CLIENT_IP']
, $_SERVER['HTTP_X_FORWARDED_FOR']
oder $_SERVER['REMOTE_ADDR']
leer ist? Oder ist das überhaupt nicht nötig?
Wenn der Grund, warum Sie die IP-Adresse des Clients herausfinden wollen, wirklich wichtig ist, schrauben Sie all diese Sachen zusammen.
Jeder dieser Header-Werte kann frei gefälscht werden.
REMOTE_ADDR
ist die einzige wirklich zuverlässige Information, da sie von Ihrem Webserver, der die Anfrage bearbeitet, an Sie übermittelt wird. Es kann theoretisch auch verfälscht werden , aber das ist viel, viel schwieriger als das Spoofing eines Header-Wertes und eine ganz andere Klasse des Angriffs.
Es gibt Ausnahmen in sehr, sehr spezifischen Hosting-Umgebungen hinter Reverse-Proxies. In diesen Fällen kann die Person, die diesen Proxy verwaltet, feststellen, für welchen Headerwert Sie testen müssen.
Überprüfen Sie keine HTTP_*
-Header für die Client-IP, es sei denn, Sie wissen genau, dass Ihre Anwendung hinter einem Reverse-Proxy konfiguriert ist. Wenn Sie den Werten dieser Header bedingungslos vertrauen, können Benutzer ihre IP-Adresse fälschen.
Das einzige $_SERVER
-Feld, das einen zuverlässigen Wert enthält, ist REMOTE_ADDR
.
Die beiden Dinge sind praktisch identisch. In dem Skript, das Sie gefunden haben, überprüft der Autor gerade, ob das Element im Array gesetzt ist, bevor es überprüft, dass es nicht leer ist.
In Bezug auf die Verwendung der empty()
-Funktion anstelle des Vergleichs, überprüfen Sie Ссылка . Da es sich um eine Variable handelt, die von der Umgebung und nicht von einer Benutzereingabe festgelegt wird, spielt es keine Rolle, welche der beiden Optionen Sie auswählen. Dein Skript sollte also vollkommen in Ordnung sein.