Mit anderen Worten, wie kann ich feststellen, ob sich die Person, die meine Webanwendung verwendet, auf dem Server befindet, auf dem sie sich befindet? Wenn ich mich richtig erinnere, macht PHPMyAdmin aus Sicherheitsgründen so etwas.
99
Host: 127.0.0.1
und es würde ausgefülltHTTP_HOST
, so ist es überhaupt keine zuverlässige Methode.$whitelist = array('127.0.0.1', '::1');
Als Ergänzung, als Funktion ...
quelle
Neuere Betriebssystembenutzer (Win 7, 8) müssen möglicherweise auch eine Remote-Adresse im IPV6-Format in ihr Whitelist-Array aufnehmen:
quelle
$_SERVER["REMOTE_ADDR"]
sollte Ihnen die IP des Benutzers mitteilen. Es ist jedoch fälschbar.Überprüfen Sie diese Kopfgeldfrage für eine sehr detaillierte Diskussion.
Ich denke, was Sie mit PHPMyAdmin in Erinnerung behalten, ist etwas anderes: Viele MySQL-Server sind so konfiguriert, dass aus Sicherheitsgründen nur von localhost aus auf sie zugegriffen werden kann.
quelle
Es tut mir leid, aber all diese Antworten scheinen mir schrecklich. Ich würde vorschlagen, die Frage neu zu formulieren, da in gewissem Sinne alle Maschinen "localhost" sind.
Die Frage sollte sein; Wie führe ich verschiedene Codepfade aus, je nachdem auf welchem Computer sie ausgeführt werden?
Meiner Meinung nach ist es am einfachsten, eine Datei namens DEVMACHINE oder was auch immer Sie wirklich wollen zu erstellen und dann einfach zu überprüfen
Denken Sie daran, diese Datei beim Hochladen in die Live-Hosting-Umgebung auszuschließen!
Diese Lösung hängt nicht von der Netzwerkkonfiguration ab, kann nicht gefälscht werden und erleichtert das Umschalten zwischen "Live-Code" und "Dev-Code".
quelle
Es scheint nicht, dass Sie verwenden sollten
$_SERVER['HTTP_HOST']
, da dies der Wert im http-Header ist, der leicht gefälscht werden kann.Sie können auch verwenden
$_SERVER["REMOTE_ADDR"]
, dies ist der sicherere Wert, aber es ist auch möglich zu fälschen. Diesremote_addr
ist die Adresse, an die Apache das Ergebnis zurückgibt.quelle
REMOTE_ADDR
Es ist jedoch möglich zu fälschen, wenn Sie es als127.0.0.1
oder fälschen möchten::1
, was eine Kompromittierung der Maschine erfordert, bei der eine FälschungREMOTE_ADDR
die geringste Ihrer Sorgen ist. Relevante Antwort - stackoverflow.com/a/5092951/3774582Wenn Sie eine Whitelist / Zulassungsliste haben möchten , die statische IPs und dynamische Namen unterstützt .
Beispielsweise:
Auf diese Weise können Sie eine Liste von Namen / IPs festlegen , die (sicher) erkannt werden können. Dynamische Namen bieten mehr Flexibilität für den Zugriff von verschiedenen Punkten aus.
Sie haben hier zwei allgemeine Optionen: Sie können einen Namen in Ihrer lokalen Hosts-Datei festlegen oder nur einen Anbieter für dynamische Namen verwenden , der überall zu finden ist.
Diese Funktion CACHES ergibt sich, weil gethostbyname eine sehr langsame Funktion ist.
Für diesen Schüler habe ich folgende Funktion implementiert:
Für eine bessere Zuverlässigkeit können Sie $ _SERVER ['REMOTE_ADDR'] für die get_ip_address () ersetzen, die @Pekka in seinem Beitrag als "diese Kopfgeldfrage" erwähnt hat.
quelle
Wie wäre es mit einem Vergleich,
$_SERVER['SERVER_ADDR'] === $_SERVER['REMOTE_ADDR']
um festzustellen, ob sich der Client auf demselben Computer wie der Server befindet?quelle
$_SERVER['SERVER_ADDR']
Gibt die Serveradresse nicht immer zuverlässig zurück, z. B. wenn Load Balancer verwendet werden, wird die IP-Adresse des Load Balancers zurückgegeben, glaube ich.Ich fand eine einfache Antwort.
Weil alle lokalen Laufwerke C: oder D: oder F: ... usw. haben.
Erkennen Sie einfach, ob das zweite Zeichen ein:
quelle