【问题标题】:Is it possible to download php files with read permissions?是否可以下载具有读取权限的php文件?
【发布时间】:2015-01-23 15:55:48
【问题描述】:

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

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

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

<?php
echo 'executed';
?>

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

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

【问题讨论】:

  • 这个问题的答案:stackoverflow.com/questions/2010623/… 解释了权限是如何与 PHP 脚本相关的。不确定它是否能回答您的全部问题,但应该是一个好的开始。

标签: php linux unix permissions server


【解决方案1】:

唯一需要“执行”权限的是老式 CGI 脚本。这些实际上是通过 shell 代表网络服务器执行的。您的网络服务器访问的所有其他文件只需要“读取”权限。

PHP 脚本不会像程序一样“执行”。网络服务器中的 PHP 插件将 php 代码读入内存并在那里执行。从来没有真正运行过“php程序”。只要文件可读,PHP 就可以加载原始代码,然后解析/执行它。

【讨论】:

    【解决方案2】:

    这是由于 Web 服务器(Apache、nginx 等)造成的。当你“询问”这个文件时,它会检查它的类型,然后猜测要做什么。当它看到 php 时,它会执行它,发送 text/html 标头。如果您希望它显示代码,请不要执行它并返回 text/plain。

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

    【讨论】:

      猜你喜欢
      • 2017-02-12
      • 2018-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-20
      • 1970-01-01
      • 2010-10-25
      相关资源
      最近更新 更多