PHP限制对超全局的访问或移动变量数据

时间:2015-07-25 00:51:04

标签: php security superglobals

这个困境来自于一个插件系统,我们正试图实现安全程序,限制插件只使用我们系统传递给它的数据。

关注点来自$ _POST或其他全局变量中可能存在的密码或其他敏感数据。

为了限制对这些全局变量的访问,最初的想法是复制数据,清空全局,并在调用插件后替换它:

$tmpPost = $_POST;
$_POST = [];
pluginCall();
$_POST = $tmpPost;
unset($tmpPost);

我预见到的问题是效率和内存使用情况。那些包含大量输入数据的页面,比如文件上传?我们将脚本内存使用量增加一倍(我假设增加加载时间)将数据复制到另一个变量:

$tmpPost = $_POST;

所以我的困境和问题:

是否有办法限制对超全球的访问和/或有没有办法重新分配变量而不复制它(基本上是一个移动)?

1 个答案:

答案 0 :(得分:0)

我不怕猜测!!

猜测,但是如果你从$ _POST转移到使用filter_input_array(INPUT_POST, ...)的系统,你甚至根本不需要超全局(因为这个函数不使用$ _POST来获取外部数组源)。您可以清除$_POSTfilter_input_array()可以获得您需要的所有值。然后,正如您所建议的那样,您真的应该将插件指向正确的输入。

以下是我的自定义清理类的示例。你只需看到这一行和PHP手册就可以看到我的意思了。

$_POST = [];

$this->filteredInputArray = filter_input_array(INPUT_POST, $filterDefinition); 

我没有尝试过这个确切的序列,但它可能值得一试。