我可以在 PHP 中包装函数吗?

Can I wrap functions in PHP?

我知道这个问题听起来很容易回答,我一定是漏掉了什么地方,但经过搜索,我找不到答案。我只能在 类 中找到有关包装函数的答案,但我想自己包装函数,例如 fopen.

原因:这听起来可能很奇怪,但我想制作一个网站生成器,您可以在其中编写代码并将其保存在您的帐户中。你应该可以写PHP,但当然你不应该删除或打开服务器文件,所以我想包装函数以便我可以先检查它们是否fopenrmdir , 或类似功能是安全的。

框架挑战:如果你真的成功了,那就是使用黑名单来实现安全,这基本上不可能有效[=26] =].对于您用“安全”版本替换的每个功能,都会有十个您没有想到的可以以恶意方式使用。

相反,您应该使用 白名单 沙盒

白名单 方法中,您根本不让用户输入正常 PHP,而是您精心挑选的一组特殊功能让他们做他们需要做的事。这可能是 PHP 的实际子集,您可以使用 nikic/php-parser, a templating language like Twig 之类的东西进行解析,或者是您为其编写简单解析器的全新语言。

沙盒 方法中,您允许用户输入完整 PHP,但您 运行 在他们无法输入的隔离环境中影响你的真实服务器。任何对文件系统或网络的访问都只是访问虚拟资源,如果进程滥用 CPU 或内存资源,整个沙箱将被终止。例如参见 [​​=11=].