2012-06-11 52 views
11

我正在用PHP做一個表格,我想保留用戶的IP地址記錄。這是剪斷,它的代碼,我用:

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

當我打開XAMPP代碼和讀取源,該值已經比是我的不同的IP地址:

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

當我在本地主機(XAMPP)中使用它時,這個IP地址通常會發生嗎?
如果沒有,是否有其他辦法可以抓取用戶的IP地址?

回答

18

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

不要那樣做。表單提交時從$_SERVER獲取請求。在生成表單並將其存儲在表單中時獲取它只是給人們改變它的機會。

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

是。從本地主機請求頁面時,獲取本地IP(IPv6)地址是正常的。

+0

Thx在提交時更改它的提示;) – zeldarulez

+0

如果某人以某種方式更改其IP地址(如使用VPN或任何其他方法)會怎麼樣?然後我將無法獲得該PC的正確IP地址。是嗎? – partho

4

':: 1'是localhost(或127.0.0.1)的IPV6版本。

打開端口80並從您的IP地址訪問該頁面。應該正常工作:)。

1

這實際上是你的IP。儘管你的IPv6 IP而不是IPv4。

在IPv6中,:: 1代表localhost/127.0.0.1。

25

IP ::1是IPv6版本中的「localhost」。你的機器配置了IPv6 - 因此你得到這個IP地址。在實時服務器上部署應用程序時,可能不會在服務器上配置IPv6,並且您的應用程序將獲得更熟悉的IPv4地址(例如aaa.bbb.ccc.ddd)。

另一方面,$_SERVER['REMOTE_ADDR']可能並不總是包含正確的地址。最好使用:

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

Thx小費!我會記住這一點。 ;) – zeldarulez

+3

如果您使用HTTP_X_FORWARDED_FOR,但還是要記住,如果您使用HTTP_X_FORWARDED_FOR,則不能相信這一點,只允許訪問本地IP用於安全管理頁面,因爲該頭部可能很容易被欺騙。事實上,StackOverflow曾經成爲這件事的受害者,幸運的是友好的用戶向他們報告了這一情況。 – smdrager

+0

@smdrager:那麼獲取用戶機器IP地址的安全方式是什麼?我需要讓我的頁面只能打開一個IP。 – sqlchild

4

1)。您不需要添加<?php echo $_SERVER['REMOTE_ADDR']; ?>即可。在這種情況下,很容易僞造它(實際上很容易)。更好地將IP添加到服務器端的數據。

2)你也可以看看$_SERVER['HTTP_X_FORWARDED_FOR']。 如果用戶有一個代理,其中一些(透明代理)將真實用戶的IP放在那裏。

3)請注意:有關IP的數據根本不值得信賴。

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

此代碼返回客戶端的ip。如果您認爲這是服務器IP,那麼您可能是對的,因爲您的服務器(可能)託管在您的電腦上。 由於您的客戶端(PC)和服務器在同一臺PC上運行,它們都具有相同的IP。 如果你不明白這一點,你應該真的做一些研究,ips,本地IPS和所有的東西。

相關問題