【问题标题】:Disallow running php file禁止运行 php 文件
【发布时间】:2014-02-04 22:01:50
【问题描述】:

我有这个目录树:

dir/
    file.php
   .htaccess

.htaccess我有:php_flag engine off,所以如果直接调用文件dir/file.php,它不会运行。

但如果我在其他 php 文件中包含 file.php,则在此目录之外,file.php 无论如何都会运行。

是否可以阻止所有 php 文件在目录内运行,即使它们被包含在该目录之外的其他文件中?

【问题讨论】:

  • 如果你不想运行它,为什么文件在那里?
  • 尝试更改您的权限以禁止 www-data 访问此文件夹。
  • @Raphaël Malié 很确定这就是答案。
  • @RaphaëlMalié 虽然请记住,您不知道 OTARIKI 正在运行什么操作系统,因此 www-data 可能不是所涉及的实际用户名。

标签: php apache


【解决方案1】:

您不能在.htaccess 中关闭 PHP 处理。这必须在 Apache 配置级别完成

<Directory /your/path/here>
    php_admin_flag engine off
</Directory>

【讨论】:

  • 这并不能解决提问者的问题,即include()从其他地方创建该目录中的文件并运行代码;你实际上并没有回答提问者的问题。
  • “你不能在 .htaccess 中关闭 PHP 处理。这必须在 Apache 配置级别完成” 这完全是矛盾的! .htaccess 用于配置 apache
  • @Sekai 你在这里混淆了两件事。 .htaccess 与配置文件不同。它可以做许多配置级别的事情,但不能全部完成。虽然您可以指定 PHP 将处理哪些文件,但如果您想为整个目录关闭 PHP 处理,这是唯一的方法。请参阅this thread 了解更多详情。
  • @Crontab 你是对的,他试图包含一个 PHP 文件,而不是直接执行它,但这是我认为你可以通过任何服务器级配置获得的最接近的文件。不幸的是,当您包含一个 PHP 文件时,就 PHP 而言,它成为调用文件的一部分。
  • @Machavity 知道,但提问者似乎不熟悉这个想法。真正做到询问者想要的唯一方法是使用权限和/或 ACL,拒绝 Web 服务器用户访问相关目录。
【解决方案2】:

您可以在该目录中的 php 文件中添加一些额外的逻辑:

 if($the-Criteria-Which-Keeps-You-From-Deleting-The-Files-Is-Met){ 

    // Your otherwise not-allowed code runs here

     } 
//Thus, the contents of this script do not execute unless you want them to. 

现在,我自己有其中的一些,我在上面的if() 语句中使用的逻辑是这样的:

if ($_SERVER['REMOTE_ADDR'] == $my-Development-IP) { [...]

【讨论】:

    【解决方案3】:

    我假设您想这样做是为了防止上传任何 php 文件,
    这是我用于我的网站的内容:

     AddType text/plain .php .php3 .php4 .php .phtml .pl .py .jsp .asp .htm .shtml .sh .cgi 
    php_flag engine off
    

    在您的文件夹中创建一个 htaccess 并将其添加到其中。
    php 不会被解释,但会显示为纯文本

    【讨论】:

    • 但是如果这个file.php文件将被包含在目录之外的其他php文件中,file.php将被运行。
    猜你喜欢
    • 2018-10-23
    • 2012-07-17
    • 1970-01-01
    • 2016-10-22
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 2015-09-18
    • 1970-01-01
    相关资源
    最近更新 更多