2011-01-23 13 views
72

Est-il sûr de faire confiance $_SERVER['REMOTE_ADDR']? Peut-il être substitué en changeant l'en-tête de la requête ou quelque chose comme ça?

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

if ($_SERVER['REMOTE_ADDR'] == '222.222.222.222') { // my ip address 
    $grant_all_admin_rights = true; 
} 
+3

En ajoutant aux réponses existantes, ce sera toujours l'adresse IP qui a fait la demande à votre serveur, mais cela ne signifie pas que c'est l'adresse IP de l'ordinateur qui a lancé la requête. N'importe quel nombre de serveurs proxy peut être entre vous et l'utilisateur final, et le plus proche de vous est l'adresse IP que vous obtenez. –

+0

oui c'est sûr car on ne peut pas être substitué par d'autres astuces ou de la triche. mais assurez-vous d'ajouter plus de vérifier la variable $ grant_all_admin_rights. –

+0

Toute variable $ _SERVER peut être usurpée - par ex. curl_setopt ($ ch, CURLOPT_HTTPHEADER, tableau ("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 à la place dit: "open_the_door_to_badguys();" vous auriez un problème. – TMG

Répondre

88

Oui, c'est sans danger. Il s'agit de l'adresse IP source de la connexion TCP et ne peut pas être remplacée en changeant un en-tête HTTP. Si vous êtes derrière un proxy inverse, le 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 (X-Forwarded-For par exemple).). Mais pour l'utilisation normale, la lecture de REMOTE_ADDR est correcte.

+3

Qu'en est-il de l'usurpation d'adresse IP? – Abdull

+0

@Abdull Les gens qui peuvent le faire sont généralement les mêmes personnes qui ont un accès physique à votre boîte. alors ne t'en fais pas pour ça. – Behrooz

+3

@Abdull IP spoofing ne peut envoyer des messages que dans un sens, vous ne pouvez pas usurper votre adresse IP et recevoir un message en retour. – Matth3w

52

$_SERVER['REMOTE_ADDR'] est l'adresse IP sur laquelle la connexion TCP est entrée. Bien qu'il soit techniquement possible d'usurper bidirectionnellement les adresses IP sur Internet (en annonçant des routes frauduleuses via BGP), ces attaques sont susceptibles d'être repérées et non disponibles pour l'attaquant type. En gros, votre attaquant doit avoir le contrôle d'un fournisseur d'accès. Il n'y a pas d'attaques d'usurpation unidirectionnelles contre TCP (pour l'instant). Cependant, l'usurpation d'adresse IP bidirectionnelle est triviale sur un réseau local.

Sachez également que ce n'est peut-être pas un IPv4, mais une adresse IPv6. Votre vérification actuelle est correcte à cet égard, mais si vous vérifiez que 1.2.3.4 se produit seulement n'importe où dans $_SERVER['REMOTE_ADDR'], un attaquant pourrait simplement se connecter à partir 2001:1234:5678::1.2.3.4. En résumé, pour toute application autre que critique (bancaire/militaire/dommages potentiels> 50.000 €), vous pouvez utiliser l'adresse IP distante si vous pouvez exclure les pirates de votre réseau local.

+4

Vous semblez très au courant du protocole Internet. –

+0

@phihag, Si '$ _SERVER ['REMOTE_ADDR']' est l'adresse IP sur laquelle la connexion TCP est entrée dépend entièrement de votre SAPI. – Pacerier

+0

est loin d'être infaisable pour un attaquant sur un WLAN WEP/WPA pour lancer le vrai client, et usurper cette adresse IP - WEP et WPA ont des faiblesses qui font de l'usurpation des paquets que vous avez été expulsés du wlan facile à créer avec les bons outils. google 'test de downgrade WPA', par exemple – hanshenrik

3

Comme mentionné ci-dessus, ce n'est pas absolument sûr. Mais cela ne veut pas dire que vous ne devriez pas l'utiliser. Envisagez de combiner cela avec d'autres méthodes d'authentification, par exemple en vérifiant les valeurs COOKIE.

+5

Après l'usurpation d'une adresse IP, la modification de la demande http et l'envoi de faux cookies est un morceau de gâteau ..... (ou un morceau de cookie) –

+0

S'il vous plaît expliquer ce que vous entendez par" non absolument sûr " – Jake

Questions connexes