2012-06-11 53 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和所有的东西。

相关问题