Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何限制包含的php scrit可以运行的函数?_Php_Mysql_Validation - Fatal编程技术网

如何限制包含的php scrit可以运行的函数?

如何限制包含的php scrit可以运行的函数?,php,mysql,validation,Php,Mysql,Validation,我有这样的架构: front end -> multiplexor.php -> script.php 我想限制可以调用的函数/过程,例如我不允许发送邮件读取文件等。只是php包含函数的子集,还限制特定的mysql查询,如“DROP TABLE”和其他擦除功能。 我如何做到这一点?我需要写一个验证脚本吗? 我正在apache上运行php5和mysql的最新版本。您可以在PHP.ini文件中提供禁用函数的列表: disable_functions=trim,strlen,exect

我有这样的架构:

front end -> multiplexor.php -> script.php
我想限制可以调用的函数/过程,例如我不允许
发送邮件
读取文件等。只是php包含函数的子集,还限制特定的mysql查询,如
“DROP TABLE
”和其他擦除功能。 我如何做到这一点?我需要写一个验证脚本吗?
我正在apache上运行php5和mysql的最新版本。

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

disable_functions=trim,strlen,exect
这取决于你的需要

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

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

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

但无论哪种情况,最好在配置级别执行这些操作。

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

disable_functions=trim,strlen,exect
这取决于你的需要

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

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

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

但无论哪种情况,最好在配置级别执行这些操作。

为了防止删除,请在mysql中删除,您可以阻止删除。
(这意味着您用于连接mysql的帐户不应具有Drop、Delete和Delete权限)


要禁用PHP功能:-

要防止删除,请在mysql中删除您可以阻止的功能。
(这意味着您用于连接mysql的帐户不应具有Drop、Delete和Delete权限)


要禁用PHP函数:-

听起来像是要创建一个称为分派表的东西。这可以使用call_user_func()或call_user_func_array()有效地完成

基本上,您应该创建一个函数,该函数接受函数名作为输入字符串(args最好作为单独的输入数组处理)。如果您有一个包含允许函数列表的数组,只需使用PHP的in_array()函数查看传递的字符串是否为允许函数。如果是,则调用_user_func[\u array]()并返回其返回值。如果不允许,则返回FALSE


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

听起来您想要创建的是一个称为分派表的东西。这可以使用call_user_func()或call_user_func_array()有效地完成

基本上,您应该创建一个函数,该函数接受函数名作为输入字符串(args最好作为单独的输入数组处理)。如果您有一个包含允许函数列表的数组,只需使用PHP的in_array()函数查看传递的字符串是否为允许函数。如果是,则调用_user_func[\u array]()并返回其返回值。如果不允许,则返回FALSE


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

对于mysql部分,我会在db中为此创建一个用户,并为他们提供您想要的权限(选择等)。对于mysql部分,我会在db中为此创建一个用户,并为他们提供您想要的权限(选择等)SQL注入将破坏您的“stripos”。。再见。。。我从没想过这个原型会被用于生产:我只是说。。。此外,大多数人都很懒惰,不会回去重新编写代码以提高效率,因此类似的东西可能会被遗忘。我需要multiplexer.php上的完整功能,是否可以仅限制调用的脚本?SQL注入将破坏您的“stripos”。。再见。。。我从没想过这个原型会被用于生产:我只是说。。。另外,大多数人都很懒惰,不会回去重新编写代码以提高效率,因此类似的东西可能会被遗忘。我需要multiplexer.php上的完整功能,是否可以仅限制调用的脚本?