限制PHP执行?
我们正在用模板系统从头开始制作wordpress类型的系统,我想知道安全性。我们希望有一个SaaS模型,用户将与其他一些用户在同一台服务器上,但我们也希望为他们提供修改自己视图文件的工具,这意味着PHP访问。我们使用Laravel作为框架。作为一个长期使用Dreamhost的用户,我知道你可以将同一台机器划分到多个环境中,但并不确定他们是用什么来实现这一点的限制PHP执行?,php,mysql,security,Php,Mysql,Security,我们正在用模板系统从头开始制作wordpress类型的系统,我想知道安全性。我们希望有一个SaaS模型,用户将与其他一些用户在同一台服务器上,但我们也希望为他们提供修改自己视图文件的工具,这意味着PHP访问。我们使用Laravel作为框架。作为一个长期使用Dreamhost的用户,我知道你可以将同一台机器划分到多个环境中,但并不确定他们是用什么来实现这一点的 如何防止执行eval()等命令、系统命令,并限制用户对fopen的访问(我假设这主要是通过linux用户权限实现的)。我想让他们直接访问V
如何防止执行eval()等命令、系统命令,并限制用户对fopen的访问(我假设这主要是通过linux用户权限实现的)。我想让他们直接访问Views文件夹,并开发他们自己的解决方案,而不是强迫他们通过我,但不会造成太大的危害。如果除了单独的用户之外还有mysql方面的考虑,也可以随意插话。有几个层需要保护 一些主机错误地依赖PHP“保护”,如open_basedir、safe_模式(较旧的PHP)、disable_函数等
<强>甚至PHP不认为它们是安全特性-< /强>
任何利用PHP的漏洞都可以禁用这些功能,然后整个系统就完蛋了,不要这样做 应该怎样做 底部- 每个托管站点的单独操作系统级别/系统用户
- 正确的权限(其中一个不能查看/编辑另一个的页面)-同时确保子目录具有正确的权限,因为它们将是相似的
- 单独的会话文件(很多WebHosts将每个PHP托管站点的会话文件放在同一个目录中,这很糟糕
LD_PRELOAD
时使用该库,它实现了所有潜在的恶意系统调用,如system()
,execve()
,以及基本上任何其他您认为不好的调用
我还没有看到一个很好的实现(除了某个地方的自定义实现)——如果我错了,请纠正我
请确保为此实现一个白名单,例如PHP中的mail()默认执行sendmail,这将不再有效
结论
在全局php.ini中添加经典的disable_函数、open_basedir等,在每个vhost中添加session.save_路径-将会话放入用户目录。确保用户不共享任何内容
正确实现底层操作系统级分离
通过grsec和LD_预加载库挂接系统调用获取硬核
分离,分离,分离。很快,像Docker这样的系统将提供基于LXC的容器来在内核级别分离用户,但它还没有完全准备好生产(imho)。您需要保护好几个层 一些主机错误地依赖PHP“保护”,如open_basedir、safe_模式(较旧的PHP)、disable_函数等
<强>甚至PHP不认为它们是安全特性-< /强>
任何利用PHP的漏洞都可以禁用这些功能,然后整个系统就完蛋了,不要这样做 应该怎样做 底部- 每个托管站点的单独操作系统级别/系统用户
- 正确的权限(其中一个不能查看/编辑另一个的页面)-同时确保子目录具有正确的权限,因为它们将是相似的
- 单独的会话文件(很多WebHosts将每个PHP托管站点的会话文件放在同一个目录中,这很糟糕
LD_PRELOAD
时使用该库,它实现了所有潜在的恶意系统调用,如system()
,execve()
,以及基本上任何其他您认为不好的调用
我还没有看到一个很好的实现(除了某个地方的自定义实现)——如果我错了,请纠正我
请确保为此实现一个白名单,例如PHP中的mail()默认执行sendmail,这将不再有效
结论
在全局php.ini中添加经典的disable_函数、open_basedir等,在每个vhost中添加session.save_路径-将会话放入用户目录。确保用户不共享任何内容
正确实现底层操作系统级分离
通过grsec和LD_预加载库挂接系统调用获取硬核
分离,分离,分离。很快,像Docker这样的系统将提供基于LXC的容器来在内核级别分离用户,但它还没有完全准备好生产(imho)。那么,你真正的问题是什么?你可以禁用eval()、exec()等命令,etc使用php.ini
disable_函数
directive您可以使用php禁用对外部文件的访问。