【问题标题】:PHP include file from outside of webrootPHP包含来自webroot外部的文件
【发布时间】:2016-07-21 18:48:55
【问题描述】:

我正在使用 Apache 和 PHP。 Webroot目录为/home/name/public_html

我想包含来自/home/name/abc.php的文件

include_one "/home/name/abc.php";

我无法打开流:权限被拒绝警告。

如果我在 webroot /home/name/public_html/abc.php 中移动同一个文件

没有错误。

Apache 用户和组有权访问文件/home/name/abc.php

我有另一台具有类似配置的服务器,它正在工作。只是想知道可能的原因。

我尝试直接在linux控制台运行PHP脚本,没有权限问题。我猜是Apache配置的问题。

【问题讨论】:

  • 这不是问题,这是一项安全功能。为什么文件需要在 webroot 目录之外?
  • php 可以读取文件系统中任何它有权访问和读取的文件。即使文件本身具有读取权限,您仍然需要访问其包含的目录。
  • @cale_b:因为不是所有的东西都应该放在 webroot 中。根据定义,webroot 中的任何内容都可供世界使用。一个单一的配置错误或服务器故障,您可能会提供原始 php 代码,包括存储在该代码中的任何后端凭据。

标签: php apache


【解决方案1】:

您应该验证 php 确实以 apache 用户身份执行。根据您的配置,php 可能在不同的用户下运行,例如如果您的 Apache 设置为使用 php-fpm。

如果服务器是linux系统,就把这个

<?php
echo "<pre>";
var_dump(posix_getpwuid());

进入文件并通过网络浏览器访问应该会显示用户信息。

【讨论】:

    【解决方案2】:

    我从here 找到了解决此问题的方法。我在我的 Centos 7 虚拟服务器上运行了 SELinux

    我需要授予 httpd 从 /home 目录读取的权限:

    sudo setsebool httpd_read_user_content=1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 2015-06-02
      • 2014-09-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      相关资源
      最近更新 更多