【问题标题】:Restrict PHP's file system access to a folder限制 PHP 的文件系统对文件夹的访问
【发布时间】:2012-09-25 21:46:27
【问题描述】:

我的场景:我有一个运行 Apache 的共享主机帐户,用于个人项目。现在我的一个朋友需要一点空间来为他的曲棍球俱乐部建立一个网站。我决定让他在我的帐户上运行它,并给他一个 FTP 帐户来限制他对 public_html/hockey 的访问。

我的问题:有没有办法限制他的 PHP 脚本(在他的 hockey 文件夹中),使他们无法访问 hockey 文件夹之外的任何文件?我正在寻找一种解决方案,涉及到 php.ini 或 .htaccess 中的配置。请不要回复告诉我他应该尽量不要访问该文件夹之外的任何内容。我正在尝试提高安全性,防止其代码中的故意访问和意外安全漏洞。

如果您知道如何在沙盒环境中运行他的内容,我们非常感谢您提供任何建设性意见。

谢谢,西蒙

【问题讨论】:

    标签: php apache security shared-hosting


    【解决方案1】:

    您可以使用open_basedir 配置设置来限制PHP 的范围。例如,要为httpd.conf 中的每个目录设置open_basedir,您可以编写

    <Directory /var/www/public_html/hockey>
      php_admin_value open_basedir "/var/www/public_html/hockey"
    </Directory>
    

    【讨论】:

    • 我知道这是超级旧的,但我不得不问 - 是否可以使用 htaccess 更改它?我试图阻止一个虚拟主机中的 PHP 脚本能够访问另一个虚拟主机中的文件,但我不希望有人能够使用 htaccess 更改此设置
    • @MyNameWouldGoHere 文档说它可以通过.htaccess 更改。而且由于通过测试来验证这一点很简单,这就是我会在你的鞋子里做的事情。
    • 只是为了帮助未来的侦探:(php.net/manual/en/configuration.changes.php) 设置指定指令的值。这不能在 .htaccess 文件中使用。任何使用 php_admin_value 设置的指令类型都不能被 .htaccess 或 ini_set() 覆盖。
    【解决方案2】:

    这是完美的.. 我知道它会在 5.6 中消失,但 5.3.x 仍然会流行很长一段时间 老实说.. 太多的托管服务提供商担心会因为破坏客户的网站而失去业务...我合作过的一些客户的客户仍然在 PHP 4.x 上运行..这是极度忽视..

    他们确实推动了他们中的一些人到 5.2 .. 在他们推动之前很久就已经过时了.. 但事实仍然是你不能只是将整个客户群推到一个新版本.. 大部分他们不是开发商,这要花他们钱,如果他们因为你强迫而取消,就会造成损失。

    我已经尝试在我们的系统上隔离共享帐户 .. 这就是为什么这很有用.. 我想尽我所能锁定 5.3-5.5 用户 .. 所以我使用 php-fcgi .. suexec.. 等等.. 所以在他们的 vhost 中执行这个指令似乎是下一个最好的隔离级别!

    我已经在我的虚拟实验室中对此进行了测试,它似乎完全符合我的要求。它使人们无法从 /etc 中获取 glob() 文件并找到我们的 passwd 文件以及他们使用的其他虚拟主机可能想要蛮力...

    【讨论】:

      【解决方案3】:

      不!

      您无法 (99%) 使用相同的 CPANEL/帐户实现这一目标。 open_basedir,allowOverride,safe_mode 还不够! cgi/perl/cron-jobs 仍然不受保护!

      您最好使用 Reseller(WHM) Cpanel 帐户,或 DirectAdmin(cpanel 替代) 多用户帐户。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-04
        • 2011-06-28
        • 1970-01-01
        相关资源
        最近更新 更多