如何限制包含的PHP脚本可以运行的功能?

时间:2011-12-06 16:00:07

标签: php mysql validation

我有这个架构:

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

我想限制可以调用的函数/过程,例如我不允许send_mail读取文件等等。只是php的一部分包含函数,并且还限制特定的mysql查询,如{ {1}}“和其他擦除功能。 我该如何实现这一目标?我需要编写验证脚本吗? 我正在使用php5和mysql最新版本运行apache。

3 个答案:

答案 0 :(得分:2)

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

disable_functions=trim,strlen,exect

取决于您的需求。

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

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

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

但在任何一种情况下,最好在配置级别上执行此类操作。

答案 1 :(得分:1)

听起来你想要创建的是一个叫做Dispatch Table的东西。这可以使用call_user_func()或call_user_func_array()有效地完成。

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

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

答案 2 :(得分:0)

为了防止掉线,在mysql中删除你可以阻止Drop, delete privileges (这意味着您用来连接mysql的帐户不应该具有Drop,Delete权限)

禁用PHP功能: - disable_functions,disable_classes