gpt4 book ai didi

php - 如何只允许某些 IP 查看网页?

转载 作者:可可西里 更新时间:2023-10-31 22:47:19 25 4
gpt4 key购买 nike

我正在尝试让 PHP 脚本工作,它将人的 IP 与文本文件(每行一个 IP)进行比较。如果此人的 IP 不在文本文件中,那么他将被重定向到 declined.html。我知道我可以为此使用 .htaccess,但 IP 列表可能会变得非常非常长。

这是我目前的代码:

<?php
$ipArray = file('ip.txt');
unset($allowed);
foreach ($ipArray as $ipTest) if (substr_count($_SERVER['REMOTE_ADDR'],trim($ipTest)) != "0") $allowed = true;
if ($allowed != true) {
header('location: /declined.html'); // the banned display page
die();
}
?>

我希望能够在我只希望某些 IP 看到的每个页面中调用此脚本,这就是我尝试调用它的方式:

<? include('ip_allow.php'); ?>

当我的 IP 不在 ip.txt 中时,当我在 HTML 页面中调用 PHP 脚本时,它不会将我重定向到/declined.html!我怎样才能解决这个问题?同样,我的问题不是如何使用 .htaccess,而是如何修复我的脚本!谢谢。

最佳答案

对于 IP 过滤,最好在处理链中尽早进行。按优先顺序:

  1. 路由器
  2. 防火墙
  3. 网络服务器
  4. 脚本

很可能您无权访问路由器或防火墙级别,但您可以使用 Apache 的 mod_rewrite 来使用外部文件进行动态阻止。按如下方式设置“启用的 IP”文件:

a.b.c.d ALLOWED
b.c.d.e ALLOWED
c.d.e.f ALLOWED
etc...

它基本上是“键值”,其中键是 IP 地址

然后是你的mod_rewrite规则(我已经编号以供引用)

1. RerwriteMap ipfiltermap txt:/path/to/your/ips/list
2. RewriteCond %{REMOTE_ADDR} (.*)
3. RewriteCond %{ipfiltermap:%1} !ALLOWED
4. RewriteCond %{REQUEST_URI} !^/declined.html
5. RewriteRule .* /forbidden.html [L]

它们的工作方式如下:

  1. 将允许的 IP 定义为“键值”对,其中键是允许的 IP,值是单词“ALLOWED”,作为名为“ipfiltermap”的映射
  2. 捕获当前请求的远程地址(客户端IP)
  3. 使用在第 2 步中捕获的 IP,在 ipfiltermap 中查找它,看看 IP 是否没有“ALLOWED”一词
  4. 特别免除您的“已拒绝”页面的 IP 执法 - 如果不这样做,被禁止的 IP 将进入无限重定向循环
  5. 如果所有 3 个 RewriteConds 都匹配,那么用户来自禁止的 IP,应该被重定向到禁止的页面。

所有这些的相关 Apache 文档是 here .

关于php - 如何只允许某些 IP 查看网页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7857279/

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