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

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

症状重现

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

nginx关于phar文件的安全处理 - 020

nginx关于phar文件的安全处理(图3-1)

修改nginx设置

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

nginx -t

nginx关于phar文件的安全处理 - nginx-t

nginx关于phar文件的安全处理(图3-2)

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

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

nginx关于phar文件的安全处理 - nginx_test

nginx关于phar文件的安全处理(图3-3)

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

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

欢迎转载传播本篇原创文章,转载请保留链接及作者信息。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

苏南大叔需要你的支持

打赏任意金额,发送截图到邮箱 shang@newsn.net ,可以领取精选回馈如下(任选其一):
  • 《前端视频教程大礼包》一套
  • 《wordpress精选皮肤》一套
  • 《dedecms织梦精选模板》一套
感谢您的打赏,让我更有动力,将更多精彩教程文章,呈现给大家!谢谢!

岁月静好

关注互联网发展,关注苏南大叔的《程序如此灵动~》博客
本文章来自:程序如此灵动~
博客地址为:https://newsn.net/
原文地址为:https://newsn.net/say/nginx-phar-safe.html
上一篇好文:利用phar-composer打包phar源码
下一篇好文:apache的handler模式下,phar安全设置

如果您转载了本文章,出于某种原因,并没有注明作者或者出处。
在这里,苏南大叔也表示理解和支持。因为苏南大叔深深地明白:
您会在合适的时机,合适的地方,给本博客一个外链。对吧?
您若开心,便是安好!岁月静好,但愿世界和平,没有纷争~