【问题标题】:How to block includes from specific directories PHP如何阻止包含来自特定目录的 PHP
【发布时间】:2017-09-29 13:35:05
【问题描述】:

问题

假设我有以下目录结构:

root
| 123
| | index.php
| | abc
| | | file.php
| 456
| | another_file.php

如何配置 PHP 以使 index.php 可以包含 file.php 但不包含 another_file.php

换句话说,include("abc/file.php") 应该可以工作,但include("../456/another_file.php") 不应该。

原因

我需要这样做的原因是因为在我的 Web 服务器上,我在同一个文件系统上有两个虚拟主机,它们用于两个不同的用户。每个用户都应该能够包含位于他们自己文件夹中的文件,但他们不应该能够包含来自其外部的文件。

每个虚拟主机都有自己的 php.ini 文件(由 suPHP 提供)。

研究/尝试

我曾尝试使用include_path php.ini 设置(请参阅:http://php.net/manual/en/ini.core.php#ini.include-path),但无济于事。我还在 StackOverflow 上广泛研究了这个主题,但无济于事 - 即 How do I set an absolute include path in PHP? 没有帮助,因为我不希望这是可选的或需要附加到文件的一段代码。

【问题讨论】:

  • 最好的解决办法是在操作系统级别阻止它。您甚至可以使用 suPHP,一个专门为此创建的模块。否则,您很快就会知道它们是读取文件的许多其他方式。

标签: php include php-ini


【解决方案1】:

假设你有两个文件夹 123456 ,他们可以打开他们文件夹的文件 你可以试试这个:

在文件夹123456 中创建.user.ini 添加指令open_basedir=./:/tmp/:/usr/local/php/ 提交.usr.ini

 root
    | 123
    | | .user.ini
    | | index.php
    | | abc
    | | | file.php
    | 456
    | | .user.ini
    | | another_file.php

touch  ./root/123/.user.ini
echo 'open_basedir=./:/tmp/:/usr/local/php/' > ./root/123/.user.ini
touch  ./root/456/.user.ini
echo 'open_basedir=./:/tmp/:/usr/local/php/' > ./root/456/.user.ini

** 然后重启php-fpm**

文件夹.//root/123/

文件夹/usr/local/php/是你必须包含的php文件夹,它应该取决于你安装php的位置,在我的电脑中,它是/usr/local/php/ tmp 文件夹可以保存 som tmp 文件。

您可以使用: 来划分不同的文件夹

【讨论】:

  • 非常感谢!我还没有签出open_basedir,它正是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-12
  • 1970-01-01
  • 1970-01-01
  • 2013-05-03
  • 2014-01-13
  • 2015-12-20
  • 2012-06-03
相关资源
最近更新 更多