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