我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

大家已经学习了phar文件的生成及解包了,那么是不是准备大展拳脚,在实际项目中使用phar文件了呢。但是,且听苏南大叔多说一句,就是关于phar文件的安全问题,因为默认情况下,如果你知晓这个phar路径的话,您的phar文件的默认行为是下载!也就说会造成代码泄漏问题。

苏南大叔:nginx如何处理phar的安全问题,修改配置禁止下载phar文件 - nginx-phar
nginx如何处理phar的安全问题,修改配置禁止下载phar文件(图3-1)

本文里面就是处理这种可以任意下载phar文件情况的。

症状重现

下面的截图,展示了一个非常危险的配置行为,我们需要对这种状态进行修复!

苏南大叔:nginx如何处理phar的安全问题,修改配置禁止下载phar文件 - 020
nginx如何处理phar的安全问题,修改配置禁止下载phar文件(图3-2)

修改nginx设置

因为大多数情况下,大家都是拿nginx+phpfpm配置站点的。这里,我们就说一下,如何修改nginx的配置文件,至于nginx的配置文件路径,不同的系统,不同的安装方法下,该配置文件的路径也是不一样的。所以,大家找到自己的配置路径即可。如果大家不知道自己的路径位置的话,这里有个非常好的小技巧,可以快速拿到你的配置值。那就是:

nginx -t

苏南大叔:nginx如何处理phar的安全问题,修改配置禁止下载phar文件 - nginx-t
nginx如何处理phar的安全问题,修改配置禁止下载phar文件(图3-3)

得到了配置路径线索后,您接下来需要做的就很简单了。下面贴一个苏南大叔的本地的配置文件,当然,您不一定需要按这个修改,每个人的需求都是不一样的。所以,仅供参考。

server {
    listen       80;
    server_name  php;
    # charset utf-8;
    # access_log  /var/www/www.abc.com/log/host.access.log;
    # error_log   /var/www/www.abc.com/log/error.log;
    # gzip off;
    root        /code/www/mine/php;
    index       index.php index.html index.htm;
    location / {
        if (!-e $request_filename) {
           rewrite  ^/(.*)$  /index.php/$1  last;
           break;
        }
    }
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
        expires 100d;
    }
    location ~ .*\.(js|css)?$ {
        expires 30d;
    }
    #error_page  404              /404.html;
    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    # location ~ \.php(/|$) {
    location ~ \.(php|phar)(/.*)?$ {
      fastcgi_split_path_info ^(.+\.(?:php|phar))(/.*)$;
      set $path_info $fastcgi_path_info;
      fastcgi_param PATH_INFO $path_info;

      fastcgi_pass   127.0.0.1:9000;
      fastcgi_index  index.php;
      include        fastcgi.conf;
      set $fastcgi_script_name2 $fastcgi_script_name;
      if ($fastcgi_script_name ~ "^(.+\.php)(/.+)$") {
        set $fastcgi_script_name2 $1;
        set $path_info $2;
      }
      fastcgi_param   PATH_INFO $path_info;
      fastcgi_param   SCRIPT_FILENAME   $document_root$fastcgi_script_name2;
      fastcgi_param   SCRIPT_NAME   $fastcgi_script_name2;
    }
}

注意看这里,显示了最重要的修改点

# location ~ \.php(/|$) {
location ~ \.(php|phar)(/.*)?$ {
   fastcgi_split_path_info ^(.+\.(?:php|phar))(/.*)$;
   set $path_info $fastcgi_path_info;
   fastcgi_param PATH_INFO $path_info;
   //...
}

这样设置并生效之后,phar文件就不会显示下载了。附赠一下nginx的重载配置的命令。

nginx -s reload

结论

在浏览器里面,敲入phar的路径后,如果没有显示下载,就满足了本篇文章的需求了。但是这个时候,浏览器里面显示的是什么呢?你可能开启了一扇新的大门哦。具体的是个什么样的大门呢?请听苏南大叔下回分解。

更多phar的经验文章,请点击这里查看。https://newsn.net/tag/phar/

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   php    nginx