安全模式已弃用为5.3.0。我从来没有真正需要它,而是因为许可错误等而多次发现它有问题。
但是我现在有一个要求,我认为安全模式会做得很好。
我构建了一个可通过模块扩展的Web应用程序。我计划自己托管系统,允许付费客户通过实现和编写挂钩到系统各个部分的模块来扩展他们的软件。
我担心的是,通过这样做,我无法确保他们上传的代码不会扫描我花了数年时间设计和测试的基础/框架。保持代码专有权对我很感兴趣。
我编写了一个模块分析工具,以确保在第三方模块中没有调用非法方法 - 不容易!!!
我在php.ini级别禁用有害函数,但这包括fopen()和它的类似 - 这意味着框架将无法调用它自己的include()操作等。
最后一种过时的安全模式,限制用户模块无法读取不共享相同ID,组等的文件。
这种事情的推荐方法是什么?在我的框架上下文中执行之前,是否缺少手动审阅或自动分析每个模块?
答案 0 :(得分:0)
safe_mode
被删除是一件好事。这是一种虚假的安全感,并且有很多方法可以绕过它。
更好的方法是使用suphp将您的应用程序作为被监禁的用户运行。这使用操作系统的安全性来保护您的应用程序。您可以将PHP代码作为无法访问shell的帐户运行,而不是禁止exec()
和system()
。而不是禁止fopen()
您删除该用户chmod 500 -R /
拥有的所有内容的写权限。或者更进一步,在chroot中运行您的应用程序。
答案 1 :(得分:0)
而不是安全模式,你可以使用php-fpm和chroot,mod_ruid和php-fpm中的每个用户权限,以及php中的opendir限制。通过这种方式,您可以使安全模式变得更加严格。
就个人而言,我会推荐使用chroot的php-fpm并禁用exec和system等系统功能。反正那些都是邪恶的。
答案 2 :(得分:0)
我在 /etc/php/7.0/fpm/php.ini 中使用 open_basedir 来绕过安全模式