3

安全模式已弃用为 5.3.0。由于权限错误等,我从来没有真正需要它,而是在过去多次发现它有问题。

但是,我现在有一个要求,我认为安全模式会做得很好。

我已经构建了一个可通过模块扩展的 Web 应用程序。我计划自己托管系统,并允许付费客户通过实现和编写连接到系统各个部分的模块来扩展他们的软件。

我担心的是,这样做,我无法确保他们上传的代码不会扫描我花费数年时间设计和测试的基础/框架。保持代码的专有性对我很感兴趣。

  1. 我编写了一个模块分析工具来确保第三方模块中没有调用非法方法 - 不容易!!!

  2. 我在 php.ini 级别禁用了有害功能,但这包括 fopen() 和它的同类 - 这意味着框架将无法调用它自己的 include() 操作等。

  3. 最后,可悲的是,安全模式已过时,限制用户模块能够读取不共享相同 ID、组等的文件。

这种事情的推荐方法是什么?在我的框架上下文中执行之前,缺少手动检查或自动分析每个模块吗?

4

3 回答 3

1

safe_mode它正在被删除是一件好事。这是一种虚假的安全感,有很多方法可以绕过它。

更好的方法是使用suphp将您的应用程序作为入狱用户运行。这使用操作系统的安全性来保护您的应用程序。而不是禁止exec()and system(),您将 php 代码作为无权访问 shell 的帐户运行。而不是禁止fopen()您从该用户拥有的所有内容中删除写权限chmod 500 -R /。或者更进一步,在 chroot 中运行您的应用程序。

于 2011-10-26T17:42:05.347 回答
0

除了安全模式,您可以在 chroot 中使用 php-fpm,在 mod_ruid 和 php-fpm 中使用每个用户权限,并在 php.ini 中使用 opendir 限制。这样,您可以使其比安全模式更加严格。

就个人而言,我会推荐使用 chroot 并禁用 exec 和 system 等系统功能的 php-fpm。反正那些都是邪恶的。

于 2013-12-05T11:55:43.337 回答
0

我在/etc/php/7.0/fpm/php.ini中使用open_basedir绕过安全模式

于 2017-04-26T19:12:12.750 回答