Ist es sicher, $ _SERVER ['REMOTE_ADDR'] zu vertrauen?

87

Ist es sicher zu vertrauen $_SERVER['REMOTE_ADDR']? Kann es ersetzt werden, indem der Header der Anfrage oder ähnliches geändert wird?

Ist es sicher so etwas zu schreiben?

if ($_SERVER['REMOTE_ADDR'] == '222.222.222.222') { // my ip address
    $grant_all_admin_rights = true;
}
Silbernes Licht
quelle
3
Zusätzlich zu den vorhandenen Antworten ist es immer die IP-Adresse, die die Anforderung an Ihren Server gesendet hat. Dies bedeutet jedoch nicht, dass die IP-Adresse des Computers die Anforderung gestartet hat. Es kann sich eine beliebige Anzahl von Proxyservern zwischen Ihnen und dem Endbenutzer befinden. Der nächstgelegene ist die IP-Adresse, die Sie erhalten.
Dan Grossman
Ja, es ist sicher, weil es nicht durch andere Tricks oder Betrug ersetzt werden kann. Stellen Sie jedoch sicher, dass Sie weitere Überprüfungen für die Variable $ grant_all_admin_rights hinzufügen.
Yuda Prawira
Jede $ _SERVER-Variable kann gefälscht werden - z. B. curl_setopt ($ ch, CURLOPT_HTTPHEADER, Array ("REMOTE_ADDR: $ ip", "HTTP_X_FORWARDED_FOR: $ ip")); Es hängt also ganz vom Kontext ab: Wenn der Angreifer eine Antwort erwartet, kehrt er zu $ ​​ip zurück. Wenn ihnen die Antwort egal ist, können sie den Header sicherlich fälschen. Wenn Ihr Code nach der Header-Überprüfung stattdessen sagte: "open_the_door_to_badguys ();" Du hättest ein Problem.
TMG
3
@TMG Sie können die $_SERVER['REMOTE_ADDR']Variable nicht fälschen, indem Sie einen HTTP-Anforderungsheader festlegen. PHP stellt automatisch alle HTTP-Anforderungsheader voran, HTTP_wenn Schlüssel im $_SERVERSuperglobal erstellt werden.
MrWhite

Antworten:

107

Ja, es ist sicher. Dies ist die Quell-IP der TCP-Verbindung und kann nicht durch Ändern eines HTTP-Headers ersetzt werden.

Ein Fall, über den Sie sich Sorgen machen sollten, ist, wenn Sie sich hinter einem Reverse-Proxy befinden. In diesem Fall ist REMOTE_ADDR immer die IP des Proxyservers, und die Benutzer-IP wird in einem HTTP-Header (z. B. X-Forwarded-For) angegeben ). Für den normalen Anwendungsfall ist das Lesen von REMOTE_ADDR jedoch in Ordnung.

sagi
quelle
4
Was ist mit IP-Adress-Spoofing?
Abdull
1
@Abdull Die Leute, die das können, sind normalerweise die gleichen Leute, die physischen Zugang zu Ihrer Box haben. Also mach dir keine Sorgen.
Behrooz
5
@Abdull IP-Spoofing kann Nachrichten nur in eine Richtung senden. Sie können Ihre IP-Adresse nicht fälschen und erhalten dafür eine Nachricht.
1
Überprüfen Internet-Router nicht die Quell- und Ziel-IP, um Pakete weiterzuleiten? Ich bezweifle, dass ein gefälschtes Paket jemals über Internetknoten hinweg das Ziel erreichen wird.
Viktor Joras
57

$_SERVER['REMOTE_ADDR']ist die IP-Adresse, über die die TCP-Verbindung eingegangen ist. Während es technisch möglich ist, IP-Adressen im Internet bidirektional zu fälschen (durch Ankündigung von Foul-Routen über BGP), werden solche Angriffe wahrscheinlich entdeckt und stehen dem typischen Angreifer nicht zur Verfügung. Grundsätzlich muss Ihr Angreifer die Kontrolle über einen ISP oder Carrier haben. Es gibt (noch) keine möglichen unidirektionalen Spoofing-Angriffe gegen TCP. Bidirektionales IP-Spoofing ist in einem LAN jedoch trivial.

Beachten Sie auch, dass es sich möglicherweise nicht um eine IPv4-Adresse, sondern um eine IPv6-Adresse handelt. Ihre aktuelle Überprüfung ist in dieser Hinsicht in Ordnung, aber wenn Sie überprüfen würden, dass dies 1.2.3.4nur irgendwo innerhalb der Datenbank auftritt, kann$_SERVER['REMOTE_ADDR'] ein Angreifer einfach eine Verbindung herstellen 2001:1234:5678::1.2.3.4.

Zusammenfassend können Sie für andere als kritische Anwendungen (Bankwesen / Militär / potenzieller Schaden> 50.000 €) die Remote-IP-Adresse verwenden, wenn Sie Angreifer in Ihrem lokalen Netzwerk ausschließen können.

Phihag
quelle
4
Sie klingen sehr gut über das Internetprotokoll informiert.
Brian Peterson
@phihag, Ob $_SERVER['REMOTE_ADDR']es sich um die IP-Adresse handelt, auf die die TCP-Verbindung eingegangen ist, hängt vollständig von Ihrer SAPI ab.
Pacerier
Für einen Angreifer in einem WEP / WPA-WLAN ist es alles andere als unmöglich, den echten Client zu starten und diese IP-Adresse zu fälschen. Sowohl WEP als auch WPA weisen Schwachstellen auf, die you have been kicked off the wlandas Erstellen von Spoofing- Paketen mit den richtigen Tools vereinfachen. Google WPA downgrade testzum Beispiel
Hanshenrik
Die IP-Adresse ist IP-Ebene, nicht TCP-Ebene.
Viktor Joras
3

Wie oben erwähnt, ist es nicht absolut sicher. Das heißt aber nicht, dass Sie es nicht benutzen sollten. Kombinieren Sie dies mit einigen anderen Authentifizierungsmethoden, z. B. dem Überprüfen von COOKIE-Werten.

Audio
quelle
6
Nach dem Spoofing einer IP-Adresse ist das Ändern der http-Anfrage und das Senden falscher Cookies ein Kinderspiel ..... (oder ein Stück Cookie)
Uri Goren
1
Bitte erklären Sie, was Sie mit "nicht absolut sicher" meinen
Jake