Est-il sûr de faire confiance à $ _SERVER ['REMOTE_ADDR']?

89

Est-il sûr de faire confiance $_SERVER['REMOTE_ADDR']? Peut-il être remplacé en modifiant l'en-tête de la demande ou quelque chose du genre?

Est-il prudent d'écrire quelque chose comme ça?

if ($_SERVER['REMOTE_ADDR'] == '222.222.222.222') { // my ip address
    $grant_all_admin_rights = true;
}
Lumière argentée
la source
3
En ajoutant aux réponses existantes, ce sera toujours l'adresse IP qui a fait la demande à votre serveur, mais cela ne veut pas dire que c'est l'adresse IP de l'ordinateur qui a lancé la demande. N'importe quel nombre de serveurs proxy peut se trouver entre vous et l'utilisateur final, et le plus proche de vous est l'adresse IP que vous obtenez.
Dan Grossman
oui c'est sûr car ne peut pas être sous-titré par un autre truc ou une tricherie. mais assurez-vous d'ajouter plus de contrôle pour la variable $ grant_all_admin_rights.
Yuda Prawira
Toute variable $ _SERVER peut être usurpée - par exemple curl_setopt ($ ch, CURLOPT_HTTPHEADER, array ("REMOTE_ADDR: $ ip", "HTTP_X_FORWARDED_FOR: $ ip")); Cela dépend donc entièrement du contexte: si l'attaquant attend une réponse, il retournera à $ ip. S'ils ne se soucient pas de la réponse, ils peuvent certainement usurper l'en-tête. Si votre code après la vérification de l'en-tête disait à la place: "open_the_door_to_badguys ();" vous auriez un problème.
TMG
3
@TMG Vous ne pouvez pas usurper la $_SERVER['REMOTE_ADDR']variable en définissant un en-tête de requête HTTP. PHP préfixe automatiquement tous les en-têtes de requête HTTP HTTP_lors de la création de clés dans le $_SERVERsuperglobal.
MrWhite

Réponses:

110

Oui, c'est sûr. Il s'agit de l'adresse IP source de la connexion TCP et ne peut pas être remplacée par la modification d'un en-tête HTTP.

Vous voudrez peut-être vous inquiéter si vous êtes derrière un proxy inverse, auquel cas REMOTE_ADDR sera toujours l'adresse IP du serveur proxy et l'adresse IP de l'utilisateur sera fournie dans un en-tête HTTP (tel que X-Forwarded-For ). Mais pour le cas d'utilisation normal, la lecture de REMOTE_ADDR convient.

Sagi
la source
4
Qu'en est-il de l'usurpation d'adresse IP?
Abdull
1
@Abdull Les personnes qui peuvent le faire sont généralement les mêmes personnes qui ont un accès physique à votre box. alors ne vous inquiétez pas trop.
Behrooz
5
@Abdull IP spoofing ne peut envoyer des messages que dans un seul sens, vous ne pouvez pas usurper votre adresse IP et obtenir un message en retour.
1
Les routeurs Internet ne vérifient-ils pas l'adresse IP source et de destination pour acheminer les paquets? Je doute qu'un paquet falsifié atteigne un jour la destination via des nœuds Internet.
Viktor Joras
57

$_SERVER['REMOTE_ADDR']est l'adresse IP de la connexion TCP. Bien qu'il soit techniquement possible d'usurper de manière bidirectionnelle les adresses IP sur Internet (en annonçant des routes erronées via BGP), de telles attaques sont susceptibles d'être repérées et non disponibles pour l'attaquant typique - en gros, votre attaquant doit avoir le contrôle d'un FAI ou d'un opérateur. Il n'y a pas (encore) d'attaques d'usurpation unidirectionnelle contre TCP. L'usurpation d'adresse IP bidirectionnelle est cependant triviale sur un réseau local.

Sachez également qu'il ne s'agit peut-être pas d'une adresse IPv4, mais d'une adresse IPv6. Votre vérification actuelle est correcte à cet égard, mais si vous vérifiez que cela 1.2.3.4ne se produit que n'importe où à l' intérieur $_SERVER['REMOTE_ADDR'], un attaquant pourrait simplement se connecter à partir de 2001:1234:5678::1.2.3.4.

En résumé, pour toutes les applications autres que critiques (bancaires / militaires / dommages potentiels> 50.000 €), vous pouvez utiliser l'adresse IP distante si vous pouvez exclure les attaquants de votre réseau local.

Phihag
la source
4
Vous semblez très informé sur le protocole Internet.
Brian Peterson
@phihag, si $_SERVER['REMOTE_ADDR']l'adresse IP sur laquelle la connexion TCP est entrée dépend entièrement de votre SAPI.
Pacerier
Il est loin d'être impossible pour un attaquant sur un WEP / WPA WLAN de renvoyer le client réel et d'usurper cette adresse IP - le WEP et le WPA ont des faiblesses qui you have been kicked off the wlanfacilitent la création de paquets d' usurpation avec les bons outils. google WPA downgrade test, par exemple
hanshenrik
L'adresse IP est au niveau IP et non au niveau TCP.
Viktor Joras
3

Comme mentionné ci-dessus, ce n'est pas absolument sûr. Mais cela ne signifie pas que vous ne devriez pas l'utiliser. Pensez à combiner cela avec d'autres méthodes d'authentification, par exemple la vérification des valeurs COOKIE.

l'audio
la source
6
Après avoir usurpé une adresse IP, changer la requête http et envoyer de faux cookies est un jeu d'enfant ..... (ou un morceau de cookie)
Uri Goren
1
Veuillez expliquer ce que vous entendez par «pas absolument sûr»
Jake