2012-06-11 42 views
11

Tworzę formularz z PHP i chcę zachować zapis adresów IP użytkownika. Jest to wycinek-go kodu użyłem:

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

Kiedy otwieram kodu w górę w XAMPP i czytać źródła, wartość miał adres IP inny niż to, co było moje:

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

Czy ten adres IP zazwyczaj występuje, gdy używam go w localhost (XAMPP)?
Jeśli nie, czy istnieją jakieś alternatywy dla przechwytywania adresu IP użytkownika?

Odpowiedz

18

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

nie rób tego. Uzyskaj wniosek od $_SERVER po przesłaniu formularza. Uzyskanie go po wygenerowaniu formularza i zapisaniu go w formularzu daje ludziom możliwość zmiany.

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

Tak. Uzyskanie lokalnego adresu IP (IPv6) jest normalne, gdy żądasz strony z localhost.

+0

Thx za poradę dotyczącą zmiany, gdy zostanie przesłana;) – zeldarulez

+0

Co zrobić, jeśli ktoś w jakiś sposób zmieni swój adres IP (np. Używając VPN lub czegokolwiek innego)? Wtedy nie otrzymam prawidłowego adresu IP tego komputera. to jest? – partho

4

":: 1" to wersja localhost (lub 127.0.0.1) w wersji IPV6.

Otwórz port 80 i przejdź na stronę ze swojego adresu IP. Powinien dobrze działać :).

1

To w rzeczywistości twoje IP. Chociaż twój IPv6 IP, a nie IPv4.

W IPv6: :: 1 oznacza localhost/127.0.0.1.

25

IP ::1 to "localhost" w wersji IPv6. Twój komputer jest skonfigurowany z IPv6 - i dlatego otrzymujesz ten adres IP. Prawdopodobnie po wdrożeniu aplikacji na serwerze Live IPv6 nie zostanie skonfigurowany na serwerze, a Twoja aplikacja uzyska bardziej znany adres IPv4 (np. Aaa.bbb.ccc.ddd).

W innej notatce $_SERVER['REMOTE_ADDR'] może nie zawsze zawierać prawidłowy adres. Lepiej używać:

if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { 
    $ip_address = $_SERVER['HTTP_X_FORWARDED_FOR']; 
} else { 
    $ip_address = $_SERVER['REMOTE_ADDR']; 
} 
+0

Thx za napiwek! Zapamiętam to. ;) – zeldarulez

+3

Opóźniony, ale także należy pamiętać, jeśli używasz HTTP_X_FORWARDED_FOR, nie możesz ufać, że pozwala to tylko na dostęp do lokalnych adresów IP dla bezpiecznych stron administracyjnych, ponieważ ta głowa może być bardzo łatwo sfałszowana. W rzeczywistości StackOverflow padł ofiarą tego właśnie problemu i na szczęście poinformował go przyjazny użytkownik. – smdrager

+0

@smdrager: jaki jest bezpieczny sposób uzyskania adresu IP komputera użytkownika? Muszę zezwolić mojej stronie na otwarcie tylko jednego adresu IP. – sqlchild

4

1). Nie musisz dodawać <?php echo $_SERVER['REMOTE_ADDR']; ?> do formularza. W takim przypadku łatwo jest go sfałszować (w rzeczywistości jest to łatwe w każdym przypadku). Lepiej dodać adres IP do danych po stronie serwera.

2) Można również sprawdzić numer $_SERVER['HTTP_X_FORWARDED_FOR']. Jeśli użytkownik ma proxy, niektóre z nich (przezroczyste proxy) umieszczają tam rzeczywisty adres IP użytkownika.

3) Uwaga: Dane dotyczące adresów IP nie są w ogóle wiarygodne.

0
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']; 
      } 

Ten kod zwraca adres IP klienta. Jeśli uważasz, że jest to adres IP serwera, prawdopodobnie masz rację, ponieważ twój serwer jest (prawdopodobnie) hostowany na twoim komputerze. Odkąd twój klient (komputer) i serwer działają na tym samym komputerze, obaj mają to samo IP. Jeśli tego nie rozumiesz, powinieneś naprawdę przeprowadzić pewne badania dotyczące ips, lokalnych ips i innych rzeczy.

Powiązane problemy