如何限制php脚本可以运行的函数


How to limit the functions an included php scrit can run?

我有这样的架构:

front end -> multiplexor.php -> script.php

我想限制可以调用的函数/过程,例如我不允许send_mail读取文件等。只是php的一个子集包含函数,也限制了特定的mysql查询,如"DROP TABLE"和其他擦除功能。我该如何做到这一点?我需要写一个验证脚本吗?我在apache上运行php5和mysql的最新版本

您可以在PHP.ini文件中提供禁用的功能列表:

disable_functions=trim,strlen,exect

取决于您的需要。

像DROP TABLE这样的指令是数据库服务器的一部分,而不是PHP的一部分,应该限制在数据库端(用户权限?)

或者如果这是不适用的,数据库访问层在你的控制之下,你可以添加简单的逻辑来检查查询类型,如:

if (stripos('DROP', $query) !== FALSE) { ... }

听起来您想要创建的是Dispatch Table。这可以使用call_user_func()或call_user_func_array()有效地完成。

基本上就是创建一个接受函数名作为输入字符串的函数(args最好作为单独的输入数组处理)。如果您有一个包含允许的函数列表的数组,只需使用PHP的in_array()函数来查看传递的字符串是否是一个允许的函数。如果是,执行call_user_func[_array]()并返回它的返回值。如果不允许,返回FALSE。

使用此方法是理想的,因为它不需要您乱搞任何PHP的全局设置。它还为您提供了将此规则应用于内置PHP函数和用户创建函数的灵活性。同样,您也可以通过创建一个不允许的函数数组来实现相反的目的。

为了防止drop, delete在mysql中,您可以阻止drop,删除特权。
(这意味着你用来连接mysql的帐户不应该有删除,删除的权限)

—disable_functions,disable_classes