是否可以下载具有读取权限的 php 个文件?

Is it possible to download php files with read permissions?

好的,所以我不太确定涉及 php 或在服务器端执行的任何其他语言的权限。

据我所知,文件具有以下权限:读取写入执行,它们可以组合起来,比如只读和执行,只写等等。共有三个"types of users",所以基本上,需要为每个用户设置读、写、执行权限,即:rootgroup 世界。如果我把每一个的读取权限设置为 "ON",理论上,我应该可以下载 php 文件,无论我是谁,因为所有用户都可以读取该文件。

在我的本地服务器上做了一个小实验。我有一个名为 a.php 的文件,其中包含以下代码:

<?php
echo 'executed';
?>

我已将其权限设置为 333,即 -r--r--r--。每个正在访问该文件的人都只能读取它。如果我使用浏览器转到 a.php,我只会看到 executed,这是 php 文件的回显结果,而不是整个文本。我不太确定为什么会这样,并且没有显示所有代码。这在某种程度上是一件好事,因为黑客将无法看到源代码,即使您忘记禁用读取权限等。

这对我的 atm 来说是个谜,如果有人能解释为什么会这样,我将不胜感激。谢谢!

发生这种情况是因为网络服务器(Apache、nginx 等)。当你 "ask" 这个文件时,它会检查它的类型,然后猜测要做什么。当它看到 php 时执行它,发送 text/html header。如果您希望它显示代码,请不要执行它并 return text/plain。

在您的情况下,php 解释器(不是浏览器!)读取文件然后执行它。如果您拒绝读取此文件,它将无法执行此操作。

唯一需要 "execute" 权限的是老式 CGI 脚本。这些实际上是通过 shell 代表网络服务器执行的。您的网络服务器访问的每个其他文件只需要 "read" 权限。

PHP 脚本不像是程序那样 "executed"。网络服务器中的 PHP 插件将 php 代码读入内存并在那里执行。从来没有真正的 "php program" 运行。只要文件可读,PHP 可以加载原始代码,然后 parse/execute 它。