对于任何知道自己在做什么的人来说,这可能是一个极其简单的问题,但我自己找不到任何答案。我正在尝试为我的好朋友设置一个子目录,以便在我的 (Apache) 托管计划上测试他的 PHP 脚本。然而,出于显而易见的原因,我不想让他访问我服务器上的任何其他内容。
他的 FTP 登录已将他引导至正确的目录,该目录不允许导航到根目录 (mydomain.com/friend/) 以上。我希望相同的行为适用于任何脚本,这样他就不能简单地
<?php print_r(glob("../*")); ?>
并查看我的所有文件。我认为这可以通过在某处设置 DocumentRoot 的 .htaccess 文件来实现,但我无法在用户目录中修改该文件。
如果不大规模重新布线 Web 服务器,是否可行?我尝试使用 Google 搜索各种内容来描述我的问题,但由于没有合适的术语,我得到的只是“共享主机”网站和试图向我推销安全套餐的人。
答案1
您可以使用open_basedir
PHP 中的参数。它将阻止 PHP 脚本访问 中指定的目录之外的内容open_basedir
。代码片段来自官方文档
open_basedir 字符串
将 PHP 可以访问的文件限制在指定的目录树中,包括文件本身。此指令不受安全模式是否打开的影响。
当脚本尝试访问文件系统时,例如使用包括, 或者打开(),检查文件的位置。当文件位于指定的目录树之外时,PHP 将拒绝访问它。所有符号链接都已解析,因此无法使用符号链接来避免此限制。如果文件不存在,则无法解析符号链接,并将文件名与(已解析的) open_basedir 进行比较。