shengxin11 发布于 2017-05-16 00:18

某个PHP文件,如果禁止外网访问,即这个PHP仅限服务器访问
因为很多数据需要用到定时任务定时运行php脚本生成,以防外网或蜘蛛运行此PHP而生成错误的数据,所以需要屏蔽外网,只限服务器访问。

7 个回答
  • 一般直接对外服务的服务器,都是由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要差得太多,具体可以自己压测一下。当然如果是在开发给客户自己安装的产品就不要让没经验的小白客户们改服务器配置了。

    2017-05-16 17:15 回答
  • Apache的Url重写能解决这个问题

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

    2017-05-16 02:12 回答
  • http://path/test.php/sign=123456 `
    if($__GET["sign"] != 123456){exit;}

    2017-05-16 09:54 回答
  • 获取IP与内网IP匹配

    2017-05-16 11:34 回答
  • 我感觉如果可以的话在网关里再寻一端口,然后放到那个端口上这样比较方便

    2017-05-16 06:49 回答
  • Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol)

    2017-05-16 02:51 回答
  • Robots协议 只是禁止搜索引擎来抓取,但是境外那么多搜索引擎。

    2018-05-25 20:09 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
活跃用户
  • 1
    问道摩托
  • 2
    袁广龙976丶
  • 3
    逍遥子
  • 4
    亮仔
  • 5
    芙蓉花
  • 6
    作小die_syj
  • 7
    王丽珠景平怡伦_621
  • 8
    adfa3sd5f6a
  • 9
    欣欣大妮
  • 10
    狂风DKC想毕业321
PHP1.CN | 中国最专业的PHP中文社区 | PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | PHP问答
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved PHP1.CN 第一PHP社区 版权所有