这个困境来自于一个插件系统,我们正试图实现安全程序,限制插件只使用我们系统传递给它的数据。
关注点来自$ _POST或其他全局变量中可能存在的密码或其他敏感数据。
为了限制对这些全局变量的访问,最初的想法是复制数据,清空全局,并在调用插件后替换它:
$tmpPost = $_POST;
$_POST = [];
pluginCall();
$_POST = $tmpPost;
unset($tmpPost);
我预见到的问题是效率和内存使用情况。那些包含大量输入数据的页面,比如文件上传?我们将脚本内存使用量增加一倍(我假设增加加载时间)将数据复制到另一个变量:
$tmpPost = $_POST;
所以我的困境和问题:
是否有办法限制对超全球的访问和/或有没有办法重新分配变量而不复制它(基本上是一个移动)?
答案 0 :(得分:0)
我不怕猜测!!
猜测,但是如果你从$ _POST转移到使用filter_input_array(INPUT_POST, ...)
的系统,你甚至根本不需要超全局(因为这个函数不使用$ _POST来获取外部数组源)。您可以清除$_POST
,filter_input_array()
可以获得您需要的所有值。然后,正如您所建议的那样,您真的应该将插件指向正确的输入。
以下是我的自定义清理类的示例。你只需看到这一行和PHP手册就可以看到我的意思了。
$_POST = [];
$this->filteredInputArray = filter_input_array(INPUT_POST, $filterDefinition);
我没有尝试过这个确切的序列,但它可能值得一试。