web-dev-qa-db-fra.com

$ _SERVER ['REMOTE_ADDR'] ne donnant pas la bonne adresse IP

Je crée un formulaire avec PHP et je souhaite conserver les adresses IP de l'utilisateur. Ceci est le snip-it du code que j'ai utilisé:

<input type="hidden" name="ip" value="<?php echo $_SERVER['REMOTE_ADDR']; ?>" />

Quand j'ouvre le code dans XAMPP et lis le code source, la valeur avait une adresse IP différente de la mienne:

<input type="hidden" name="ip" value="::1" />

Est-ce que cette adresse IP se produit normalement lorsque je l’utilise dans un hôte local (XAMPP)?
Si non, existe-t-il une alternative pour saisir l'adresse IP de l'utilisateur?

11
zeldarulez

<input type="hidden" name="ip" value="<?php echo $_SERVER['REMOTE_ADDR']; ?>" />

Ne fais pas ça. Obtenez la demande de $_SERVER lorsque le formulaire est soumis. Le récupérer lorsque le formulaire est généré et le stocker dans le formulaire donne simplement aux utilisateurs la possibilité de le modifier.

Does this IP address normally happen when I use it in a localhost (XAMPP)?

Oui. Obtenir l'adresse IP locale (IPv6) est normal lorsque vous demandez une page à localhost.

18
Quentin

IP ::1 est "localhost" dans la version IPv6. Votre machine est configurée avec IPv6 - et vous obtenez donc cette adresse IP. Probablement, lorsque vous déploierez votre application sur le serveur live, IPv6 ne sera pas configuré sur le serveur et votre application obtiendra une adresse IPv4 plus familière (par exemple, aaa.bbb.ccc.ddd).

Sur une autre note, $_SERVER['REMOTE_ADDR'] peut ne pas toujours contenir la bonne adresse. Il vaut mieux utiliser:

if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip_address = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    $ip_address = $_SERVER['REMOTE_ADDR'];
}
25
Aleks G

1). Vous n'avez pas besoin d'ajouter <?php echo $_SERVER['REMOTE_ADDR']; ?> pour former. Dans ce cas, il est facile de le forger (en fait, c'est facile dans tous les cas). Il vaut mieux ajouter l’IP aux données côté serveur.

2) Vous pouvez également consulter $_SERVER['HTTP_X_FORWARDED_FOR']. Si l’utilisateur a un proxy, certains d’entre eux (mandataires transparents) y placent la véritable adresse IP.

3) Remarque: les données sur les adresses IP ne sont pas du tout fiables.

4
Nayjest

':: 1' est la version IPV6 de localhost (ou 127.0.0.1).

Ouvrez le port 80 et visitez la page à partir de votre adresse IP. Devrait bien fonctionner alors :).

4
Prash

Ceci est en fait votre adresse IP. Bien que votre IPv6 IP et pas IPv4.

Dans IPv6, :: 1 correspond à localhost/127.0.0.1.

1
Khôi
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARTDED_FOR'] != '') {
                $ip_address = $_SERVER['HTTP_X_FORWARDED_FOR'];
            } else {
                $ip_address = $_SERVER['REMOTE_ADDR'];
            }   

Ce code renvoie l'ip du client. Si vous pensez que cela correspond à l'adresse IP du serveur, vous avez probablement raison, car votre serveur est (probablement) hébergé sur votre ordinateur . Étant donné que votre client (l'ordinateur) et le serveur fonctionnent sur le même ordinateur, ils ont tous deux la même adresse IP. . Si vous ne comprenez pas cela, vous devriez vraiment faire des recherches sur les IPS, les IPS locaux et tout le reste.

0
Max