PHP 服务挂了之后是不是就能查看. PHP 文件源码了?

2021-10-21 18:15:20 +08:00
 ysy950803

问个小白问题,有这么一个场景,假如我把.php 文件放在网站目录下,和 index.html 同目录,可通过浏览器访问的那种。 比如有一个 test.php 文件,里面有一些 PHP 代码,不渲染任何东西,当服务正常的时候,浏览器显示空白,这是正常情况。但如果 fpm 等相关服务挂掉了,是不是再访问就直接视为普通文本文件返回给浏览器了?这样就能看见源码了?

8779 次点击
所在节点    PHP
115 条回复
void1900
2021-10-27 14:48:11 +08:00
@hxy100
你的回答我真的看了,帮你总结下.

1. 就是不完全懂什么是 MIME
2. 然后和扩展名分不清楚
3. 被 apache 误导
4. 还有就是语文也不好。
5. 还有可能是忘了自己一开始的回答,通篇强调 MIME ,然后还说一个“配置正确”很多含义,服气,给你点个赞。

“并不会,了解下什么叫 MIME type ,只要你 MIME type 配置正确(通常情况下以文件后缀名作为区分),无论服务怎么挂,是不会暴露源码的,除非你把.php 后缀的文件配置成 txt 形式( text/plain )加载,这样无论服务挂不挂都会暴露源码。”
void1900
2021-10-27 14:49:06 +08:00
@miencun apache 可以 SetHandle proxy: 一样转发给 cgi ,一样可以不配 mime
miencun
2021-10-27 14:50:48 +08:00
@void1900 这不就是反代吗?
void1900
2021-10-27 14:55:01 +08:00
@miencun 也是,apache module 确实算是强相关
hxy100
2021-10-27 14:58:13 +08:00
你是不是傻,来,我来一一回复你:

“人家结尾都说了 “并没有在内部 mime 列表中查出一个['php'=>'type/php']这种东西。”。”

——请把我这个帖子的回复连贯起来看,我上面的回复里面说了,并不是要明示“'php'=>'type/php'”这样的东西才叫 php 有 MIME Type ,没定义不代表就没有,MIME Type 是 HTTP 类应用在区分不同文件类型的时候引入的概念,但不是说这类东西只能跟浏览器挂钩,Web 服务也是需要的,比如 Apache 里面是定义了 PHP 的 MIME Type 类型是 application/x-httpd-php ,你可以不加这个名字,叫 application/x-abc 也行,总之是为了区分不同类型的文件; Nginx 默认只定义了所有常见的静态资源类型的 MIME Type ,没去定义任何的动态类语言的 MIME Type ( php ,jsp 等等),是因为 Nginx 常用做前端负载均衡代理服务使用,你要给他一个 PHP 的 MIME 定义,他也没错,Nginx 对不同的文件类型,也同样有自己 MIME Type 概念,其实严格一点说,所有具有后缀名的文件都有 MIME Type ,只要我们需要了,我们就可以给这一类文件定义一个 MIME Type ,Web Server 靠这个东西区分不同的文件类型该做什么样处理。你的问题在于陷入了一个误区,认为只有浏览器的 Content-Type 跟 MIME Type 有关系,其他的地方都没关系。

---

“写正则用的是扩展名,那假如我将整个目录都 proxy_pass 给 fpm 呢?你还怎么扯你的扩展名?”

——你当然可以这样设置,但你这是正常和常规的做法吗?万一你这个路径下边有子目录呢,子目录里面有图片,js
,css 文件呢,你是不是要不管三七二十一统统交给后端去解析,还是说你把所有的子目录一个个分开来设置,不管嵌套几层,统统分开设置,反正就是打死不用后缀名来匹配。顺便建议你,平时在服务器上配置 Nginx 和 PHP 也采用你说的做法,打死不要用 php 后缀名来做正则匹配哦,我会为你鼓掌,你要偷偷用了你就是小狗。
hxy100
2021-10-27 14:59:02 +08:00
忘记艾特你了,请看上一楼,专门回复你的。 @void1900
void1900
2021-10-27 15:01:42 +08:00
@hxy100 等你搞懂了再来吧哥么
hxy100
2021-10-27 15:06:26 +08:00
@miencun CGI 你也得用相应的规则配置去匹配.php 这一类后缀的文件,这还叫没关系。虽然 MIME Type 不全等于文件拓展名(这一点我上面的回复说了,就算我强行关联吧),但 MIME Type 就是为了让 HTTP 服务 C/S 两端前后呼应,用来区分不同文件类型的,想想你用 Niginx 配置代理 PHP 时候怎么写的 location 来匹配呢,用了 php 的拓展名没有?
hxy100
2021-10-27 15:11:27 +08:00
@void1900 语文不好的是你,理解能力差,所以一开始才看不懂别人的回复里面已经约定了很多东西,你视而不见,需要一遍又一遍跟你解释,我说了不急,只要 V2 这站还活着,让时间给你答案。
miencun
2021-10-27 15:17:17 +08:00
@hxy100
1. 不利用任何 Mime 判断,现在都反代,Mime 唯一的用途只是让服务器输出 Content-Type ,以供浏览器参考如何加载文件。
2. 扩展名和 Mime 毛关系都没有,你以为 php 叫 application/x-httpd-php ,谁定义的?浏览器为什么会暴源码,因为浏览器不认识 application/x-httpd-php !
void1900
2021-10-27 15:17:39 +08:00
@hxy100
你强关联就已经错了

其次即使是 apache ,重点也不是 MIME 配置,重点也是 SetHandler ,也并不是 “MIME 配置”,只是 SetHandler 用到了 php 的 MIME type ,懂了吗?

重点根本不是 “MIME type 配置”,MIME 配置是 AddType ,搞不懂就先去搞懂他,我累了,这届新人真难带
void1900
2021-10-27 15:26:01 +08:00
@miencun 他根本就不懂这个东西,和他掰扯真的很累
void1900
2021-10-27 15:30:23 +08:00
@hxy100

另外跟你说吧,“application/x-httpd-php” 是 PHP 定义的,不是 apache 定义的
hxy100
2021-10-27 15:32:04 +08:00
@void1900 对牛弹琴,说了那么多白说了。如果你要好好说话,你可以说 MIME Type 不能和拓展名相关联,只能做描述文件类型用,那这个问题本身就有争议,我可以考虑接受。尽管这个问题有争议,回复了那么多,你也应该知道我要说的 MIME Type 就是 Web Server 根据不同拓展名来处理不同类型文件的意思。而不是杠子眼,为什么我说有争议,是因为这个问题你在 Google 和 Stackoverflow 上都有两个版本,普遍认为 Apache ,IIS 这样的关联比较强(直接写在配置文件里或者配置界面上),Nginx 等代理性质的服务器关联比较弱,但不是代表没关系。

第二个,关于你说的 SetHandle ,那你觉得 Apache 是凭什么东西找到它要 Handle 的对象的呢?
void1900
2021-10-27 15:38:47 +08:00
@hxy100 大神你说的都对,加油!
hxy100
2021-10-27 15:45:48 +08:00
@miencun 又来一个搞笑的。你的两个观点都大错特错。你甚至还不如他 @void1900
引用你的话:
“扩展名和 Mime 毛关系都没有,你以为 php 叫 application/x-httpd-php ,谁定义的?浏览器为什么会暴源码,因为浏览器不认识 application/x-httpd-php ”
----
解答:
1 、扩展名和 Mime 是一一对应的关系,当然了,也可以一对多,一个 MIME 对应多个拓展名。
2 、浏览器暴露源码是因为 Web 服务器处理失误输出了源文件的原始数据( RAW DATA ),跟你浏览器收到什么 Content-type 没有关系,这个东西很好证明,你可以不用浏览器啊,Linux 有现成的 curl 命令,Web 服务器端配置有问题的话,你用 curl http://xxx 不一样能得到服务器返回的源码吗?跟 Content-Type 有什么关系呢?只跟你服务器输出了什么东西有关系,不止是 Content-Type ,绝大多数的 HTTP 头部信息其实都是可以忽略的,不影响结果输出,绝大部分的头部信息都属于冗余信息,需要用到的时候才拿出来用。
void1900
2021-10-27 15:51:31 +08:00
@hxy100

哈哈哈哈哈 大神干的漂亮,求你别 @我了,我真的知道错了


让我静静的观蛙吧,哈哈哈哈哈哈哈哈哈哈哈 (笑倒在了井口)
InDom
2021-10-27 16:00:43 +08:00
弱弱的补上一刀

```Nginx.conf
location ~ \.(php|html?|svg|jpg)$ {
fastcgi_pass php74:9000;
fastcgi_index index.php;
include fastcgi.conf;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
```

以上配置是可以正常执行的,如果内部有 html 代码,也是可以执行的...(似乎)
miencun
2021-10-27 16:05:36 +08:00
@void1900 你别走,我们俩都被他纠住衣领了,你还想跑?
void1900
2021-10-27 16:06:06 +08:00
@InDom 你看到你 location 里的 php 了吗,那就是 mime 配置,还说和 MIME 没关系。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/809602

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX