PHP 安全模式替代方案
Posted
技术标签:
【中文标题】PHP 安全模式替代方案【英文标题】:PHP safemode alternative 【发布时间】:2011-10-25 16:38:11 【问题描述】:安全模式已弃用为 5.3.0。由于权限错误等原因,我从来没有真正需要它,而是在过去多次发现它有问题。
但是我现在有一个要求,我认为安全模式会做得很好。
我已经构建了一个可通过模块扩展的 Web 应用程序。我计划自己托管系统,并允许付费客户通过实现和编写连接到系统各个部分的模块来扩展他们的软件。
我担心的是,这样做,我无法确保他们上传的代码不会扫描我花费数年时间设计和测试的基础/框架。保持代码的专有性对我来说非常重要。
我编写了一个模块分析工具来确保第三方模块中没有调用非法方法 - 不容易!!!
我在 php.ini 级别禁用了有害功能,但这包括 fopen() 和它的同类 - 这意味着框架将无法调用它自己的 include() 操作等。
最后,遗憾的是,安全模式已过时,限制用户模块读取不共享相同 ID、组等的文件。
对于这种事情,推荐的方法是什么?没有在我的框架上下文中执行之前手动检查或自动分析每个模块?
【问题讨论】:
推荐的方法是使用许可协议,如果违规者试图对您的系统进行逆向工程,您可以用湿面条将其折磨致死。从长远来看,其他任何事情都是徒劳的。 Marc B 的建议很好。你让人们在你的代码之上编写代码......没有办法隐藏任何东西,通过这种直接访问。或许您可以考虑使用 RESTful API 或其他方式创建 Web 服务? 【参考方案1】:safe_mode
被删除是件好事。这是一种虚假的安全感,并且有 许多 方法可以绕过它。
更好的方法是使用suphp 以被监禁的用户身份运行您的应用程序。这使用操作系统的安全性来保护您的应用程序。不是禁止exec()
和system()
,而是将您的php 代码作为无权访问shell 的帐户运行。不是禁止fopen()
,而是从该用户chmod 500 -R /
拥有的所有内容中删除写权限。或者更进一步,在 chroot 中运行您的应用程序。
【讨论】:
【参考方案2】:除了安全模式,您可以在 chroot 中使用 php-fpm,mod_ruid 和 php-fpm 中的每个用户权限,以及 php 中的 opendir 限制。这样,您可以使其比安全模式更加严格。
就个人而言,我会推荐 php-fpm 与 chroot 并禁用系统功能,如 exec 和 system。反正这些都是邪恶的。
【讨论】:
【参考方案3】:我在 /etc/php/7.0/fpm/php.ini 中使用 open_basedir 绕过安全模式
【讨论】:
以上是关于PHP 安全模式替代方案的主要内容,如果未能解决你的问题,请参考以下文章