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

时间:2015-01-23 15:55:48

标签: php linux unix permissions server

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

据我所知,文件具有以下权限:读取写入执行,它们可以合并,例如读取和只执行,只写,等等。有三种“用户类型”,因此基本上,需要为每个用户设置读取,写入和执行权限:用户,即: root group ,的世界即可。如果我为每个人设置读取权限为“ON”,理论上,我应该能够下载php文件,无论我是谁,因为所有用户都可以读取该文件。

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

<?php
echo 'executed';
?>

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

对我来说这是一个谜,如果有人能够解释为什么会发生这种情况,我会非常感激。谢谢!

2 个答案:

答案 0 :(得分:1)

这是因为Web服务器(Apache,nginx等)。当你&#34;问&#34;对于此文件,它检查其类型,然后猜测要做什么。当它看到它执行它时,发送text / html标题。如果您希望它显示代码,请不要执行它并返回text / plain。

在你的情况下,php解释器(不是浏览器!)读取文件然后执行它。如果你否认从这个文件中读取它就无法做到这一点。

答案 1 :(得分:1)

唯一需要“执行”权限的时间是旧式CGI脚本。这些字面意思是代表网络服务器通过shell执行的。您的网络服务器访问的每个其他文件只需要“读取”权限。

PHP脚本不是“执行”,就好像它们是程序一样。 Web服务器中的PHP插件将php代码读入内存并在那里执行。在任何时候都没有真正的“PHP程序”运行。只要文件可读,PHP就可以加载原始代码,然后解析/执行它。