防止IP欺骗


Preventing IP spoofing

如果我将这两个都放入数据库,这足以防止网站访问者欺骗他们来自不同的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将不可用。