gpt4 book ai didi

php - $_SERVER ['REMOTE_ADDR' ] 返回假 IP

转载 作者:行者123 更新时间:2023-11-29 04:46:37 25 4
gpt4 key购买 nike

我正在为我的网站制作一个 anto-fload 脚本。我不能使用任何像 fail2ban 之类的服务来处理它。我关于 $_SERVER['REMOTE_ADDR'] 值的问题。有什么方法可以让这个函数返回一个假 IP 吗?我在某处听说这是可能的,想知道那是怎么发生的,我能做些什么来防止它发生?这就是我的脚本:

        $ip = $_SERVER['REMOTE_ADDR'];
$query = "SELECT * from `banned_users` WHERE `ip`='".$ip."'";
if(mysql_num_rows(mysql_query($query))!=0)die("you have been banned from the site!");

if(isset($_SESSION['views']) && isset($_SESSION['time']) && $_SESSION['time']>=time()-2)$_SESSION['views']++;
else {
$_SESSION['views']=1;
$_SESSION['time'] = time();
}
if($_SESSION['views']>=15){
$query = "INSERT into `banned_users` values ('',".time().",'".$ip."') ";
mysql_query($query);
die();
}

如您所见,如果用户在 2 秒内刷新超过 15 次,它就会禁止他访问该站点。我的另一个问题是关于 15 次操作,它是否物有所值?我应该降低它吗?因为我的主机有带宽限制。

谢谢。

最佳答案

REMOTE_ADDR 由网络服务器提供给 PHP。它从传入 IP 请求的地址中获取它。

它通常相当准确,但是:

  • 如果有人知道自己在做什么并且真的不想被追踪,则可以进行欺骗。

  • 如果用户通过代理访问站点,它也可能具有误导性的值——您将获得的地址将是代理的地址,而不是用户的最终地址。 (您可能会或可能不会获得代理转发地址的其他 $_SERVER 字段,具体取决于代理的配置。您不能指望它是准确的)

  • 如果用户在他们自己的网络中,NAT、防火墙、代理和其他网络系统可能会导致他们认为是他们的 IP 地址的地址可能不是您的站点收到的地址。对于该网络中的所有用户,您可能只会看到一个 IP 地址或一小部分地址。这将包括很多(大多数)企业(即从他们的办公室拜访您的人),并且还可能包括一些 ISP,这意味着该 ISP 的所有客户在您看来可能是相同的 IP 地址,并阻止其中一个他们可能会全部屏蔽。

[can it] get some wierd combination of numbers and dots or NULL or something else not necessarily an IP?

我猜它可能包含一个 IPv6 地址。如果您的代码期望只看到 IPv4 地址,那将是一个问题。但一般来说,它总是是一个有效的 IP 地址(即使它被欺骗了,它仍然需要有效才能让服务器接受连接)。

关于php - $_SERVER ['REMOTE_ADDR' ] 返回假 IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17967970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com