发布于 1970-01-01 08:00
  • 6 个回答
    • 一般直接对外服务的服务器,都是由Web服务器接受HTTP请求,然后再转给mod_php或者php-fpm解释执行PHP程序。这意味着完全可以在Web服务器上限制。Apache服务器的限制方法 @iefsou 君已经提供了,我来写个nginx的限制配置:

      location /uri/path/to/your/script.php {
          allow 192.168.0.0/16;
          allow 172.16.0.0/12;
          allow 10.0.0.0/8;
          allow 127.0.0.0/8;
          deny all;
      }
      

      这个方法也可以用在外网限制个别IP可以访问,具体请参考nginx的access模块配置手册

      当然,在PHP程序里限制也不是不可以,按同样的方式判断用户的IP是否局域网IP:

      function is_local_ip($ip_addr = null) {
          if (is_null($ip_addr)) {
              $ip_addr = $_SERVER['REMOTE_ADDR'];
          }
          $ip = ip2long($ip_addr);
          return $ip & 0xffff0000 == 0xc0a80000 // 192.168.0.0/16
              || $ip & 0xfff00000 == 0xac100000 // 172.16.0.0/12
              || $ip & 0xff000000 == 0xa0000000 // 10.0.0.0/8
              || $ip & 0xff000000 == 0x7f000000 // 127.0.0.0/8
          ;
      }
      

      如果不是来自局域网,你就header输出个403或者显示个错误页面给他看就行。

      值得一提的是用PHP的方法判断会导致请求必须交给PHP解释器,然而PHP解释器的性能比nginx直接返回403要差得太多,具体可以自己压测一下。当然如果是在开发给客户自己安装的产品就不要让没经验的小白客户们改服务器配置了。

      2022-12-01 20:15 回答
    • Apache的Url重写能解决这个问题

      RewriteCond %{REQUEST_URI} myfile\.php [NC]
      RewriteCond %{REMOTE_ADDR} !^127.0.0.1$
      RewriteRule .* - [R=503,L]

      2022-12-01 20:15 回答
    • http://path/test.php/sign=123456 `
      if($__GET["sign"] != 123456){exit;}

      2022-12-01 20:15 回答
    • 获取IP与内网IP匹配

      2022-12-01 20:15 回答
    • 我感觉如果可以的话在网关里再寻一端口,然后放到那个端口上这样比较方便

      2022-12-01 20:15 回答
    • Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol)

      2022-12-01 20:15 回答
    撰写答案
    今天,你开发时遇到什么问题呢?
    立即提问
    PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有