防止IP欺骗

8

如果我将这两个都存入数据库中,是否足以防止网站访问者伪造他们来自不同的IP地址?

$ip1 = $_SERVER['HTTP_X_FORWARDED_FOR'];
$ip2 = $_SERVER['REMOTE_ADDR'];

3
“Spoofing”是指伪造数据或信息以欺骗计算机系统或用户的行为。$_SERVER['REMOTE_ADDR']将显示远程端点的IP地址,这在连接过程中很难伪造,但在连接的任一端点附近更容易伪造,但该主机上的程序可能会恶意冒充您的某个用户。你真正想要衡量或预防什么? - sarnold
2
@sarnold 我想要限制每个IP地址在5分钟内只能执行一次某个操作。这样,一个人就只能每5分钟执行一次该操作,而不能每分钟不停地点击数百次。 - John
5个回答

4
短回答 - 不行。您永远无法保证IP和个人之间的链接。但基本上,对于几乎所有实际目的,这已经足够了。除非您真的希望有人采取重大措施来隐藏其IP,否则您应该没问题。它真的取决于您试图做什么,它是否足够好。编辑:刚看到您在第一篇文章中的意见。可以考虑使用Evercookies - 它们极具侵入性和不道德,但它们确实非常出色,所以由您决定。

就像我说的那样,虽然不道德,但绝对很酷。我想知道SOPA的人会怎么想:P - Joe
我个人不会使用它,但是,是的,这确实非常棒。直到现在,我才意识到有多少种方式可以在用户计算机上存储可识别信息。 - Cyclone

2

HTTP_X_FORWARDED_FOR是一个HTTP头,因此可以很容易地被欺骗。REMOTE_ADDR是由Web服务器提供的环境变量,如CGI规范中所指定的那样。它不容易被欺骗。因此对缓存任何一个都没有真正的意义。

如果有人使用受损代理服务器欺骗HTTP_X_FORWARDED_FOR头,则您无法对此做太多事情。

但是,应该更容易信任非代理请求未伪造的内容,因为除非攻击者与其位于同一子网上,否则它们仅限于盲目的欺骗攻击,这需要他们猜测TCP连接的序列和确认号。在现代网络中,这非常难以实现。即使他们设法做到了,他们也无法接收路由到伪造IP的任何数据,因此很容易过滤掉任何盲目的欺骗攻击。

现在,实际上不可能(好吧,没有什么是不可能的,但它确实需要非常特定的情况并且应用范围有限)有人使用伪造的IP向Web服务器进行匿名TCP连接。大多数情况下,数据包欺骗只用于DDoS和洪水攻击。


1

不,伪造头部信息X-FORWARDED-FOR非常容易。尝试创建一个账户系统或者依赖于电子邮件等其他方式。你不能仅仅信任IP地址。

根据你上面的评论,$_SERVER['REMOTE_ADDR']很可能就足够了,因为他们每次想要执行该操作都必须更改IP地址,这将涉及代理或最有可能是Tor。


0

不,你只能避免使用某些代理服务器。

仍然有一些选项可以让您“隐藏”真实IP(许多人喜欢保护隐私),例如:

IP日志记录只能帮助您针对某些类型的用户(其中许多人使用其提供程序池中的动态IP,因此除非有法院命令,否则您永远不会知道是谁并与他/她一起禁止许多人),但对于拥有150台计算机的管理员来说却无济于事...


0

当任何用户使用代理服务器访问您的网站时,这两个值都是不同的。您可以使用HTTP_X_FORWARDED_FOR服务器变量获取IP地址。因此,在这种情况下,“HTTP_X_FORWARDED_FOR”由代理服务器发布,描述客户端IP,而“REMOTE_ADDR”描述代理服务器的IP。

当任何用户在没有任何代理服务器的情况下访问您的网站时,您可以使用REMOTE_ADDR服务器变量获取IP地址。因此,在这种情况下,HTTP_X_FORWARDED_FOR和HTTP_VIA将不可用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接