如果我将这两个都放入数据库,这足以防止网站访问者欺骗他们来自不同的IP地址吗?
$ip1 = $_SERVER['HTTP_X_FORWARDED_FOR'];
$ip2 = $_SERVER['REMOTE_ADDR'];
简短回答-否。您永远不能保证IP和个人之间的链接。然而,对于几乎所有的实际目的来说,是的,这已经足够了。
除非你真的希望有人不遗余力地隐藏他们的IP,否则你应该没事。
这真的取决于你想做什么,是否足够好。
编辑:刚刚看到您对第一篇文章的评论。一种选择是看看Evercookies——它们极具侵略性和不道德,但它们确实做得很好,所以这是你的决定。
HTTP_X_FORWARDED_FOR
是一个HTTP头,因此很容易被欺骗。CCD_ 2是由CGI规范中指定的网络服务器提供的环境变量。它不容易被欺骗。因此,缓存任何一个都没有实际意义。
如果有人使用受损的代理服务器伪造HTTP_X_FORWARDED_FOR
标头,那么您对此无能为力。
然而,应该更容易相信未代理的请求不会被欺骗,因为除非攻击者在同一个子网上,否则他们仅限于盲欺骗攻击,这需要他们猜测TCP连接的序列和确认号。这在现代网络上很难做到。即使他们成功地做到了这一点,他们也无法接收任何路由到欺骗IP的数据,因此很容易过滤掉任何盲目的欺骗攻击。
如今,有人真的不可能(好吧,没有什么是不可能的,但它确实需要非常特殊的情况,而且应用程序有限)使用伪造的IP与网络服务器建立匿名TCP连接。数据包欺骗最多用于DDoS和洪水攻击。
不,伪造X-FORWARDED-FOR
非常容易,它实际上是作为标头发送的。试着建立一个帐户系统,或者让它依赖于电子邮件之类的东西。您不能仅信任IP。
鉴于您的上述评论,$_SERVER['REMOTE_ADDR']
很可能就足够了,因为他们每次想要执行该操作时都必须更改IP,这将涉及代理或很可能是Tor。
否,您只能避免使用某些代理服务器。
仍然有一些选项可以让你"隐藏"你的真实IP(许多人喜欢他们的隐私),例如:
- VPN
- NAT
- ssh,例如链接
- 端口转发
- 来自工作、学校、酒吧、朋友的联系
IP日志记录可以再次帮助某些类型的用户(他们中的许多人使用他们提供的池中的动态IP,所以如果没有法庭命令,你永远不会知道谁是那个人,并禁止许多人与他/她在一起),但反对150台可用机器的管理员。。。
当任何用户使用代理服务器访问您的网站时,在这种情况下,两个值都不同。可以使用HTTP_X_FORWARDED_FOR服务器变量获取IP地址。因此,在这种情况下,"HTTP_X_FORWARDED_FOR"是由代理服务器发布的,它描述客户端IP,而"REMOTE_ADDR"则描述代理服务器的IP。
当任何用户在没有任何代理服务器的情况下访问您的网站时,在这种情况下,您可以使用REMOTE_ADDR服务器变量获取IP地址。因此,在这种情况下,HTTP_X_FORWARDED_FOR和HTTP_VIA将不可用。