首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使代码工作与register_globals关闭

使代码工作与register_globals关闭
EN

Stack Overflow用户
提问于 2018-12-14 05:20:45
回答 2查看 0关注 0票数 0

我已经继承了一些遗留的PHP代码,这些代码是在标准实践中使用的register_globals(从PHP 4.2.0开始,该指令默认为关闭,2002年4月22日发布)。

我们现在知道,启用它对安全性有害。问题是如何在代码中找到我需要使用的所有位置$_GET$_POST?我唯一的想法是设置错误报告以警告未初始化的变量,然后测试站点的每个部分。有没有更简单的方法?我是否必须测试站点中的每个代码路径,或者PHP会在文件的基础上发出警告吗?

EN

回答 2

Stack Overflow用户

发布于 2018-12-14 13:58:08

我使用内置的Tokenizer函数编写了一个脚本。它非常粗糙,但它适用于我正在研究的代码库。我相信你也可以使用CodeSniffer。

票数 0
EN

Stack Overflow用户

发布于 2018-12-14 14:31:00

您可以手动“伪造”寄存器全局效果但添加一些安全性。(我从名为xoops的osCommerce fork中部分抓住了这个)

//  Detect bad global variables
$bad_global_list = array('GLOBALS', '_SESSION', 'HTTP_SESSION_VARS', '_GET', 'HTTP_GET_VARS', '_POST', 'HTTP_POST_VARS', '_COOKIE', 'HTTP_COOKIE_VARS', '_REQUEST', '_SERVER', 'HTTP_SERVER_VARS', '_ENV', 'HTTP_ENV_VARS', '_FILES', 'HTTP_POST_FILES');
foreach ($bad_global_list as $bad_global ) {
    if ( isset( $_REQUEST[$bad_global] ) ) {
        die('Bad Global');
    }
}

//  Make global variables
foreach ($_REQUEST as $name -> $value) {
    $$name = $value; // Creates a varable nammed $name equal to $value.
}

虽然你想调整它以使你的代码更安全,至少通过将全局配置变量(如路径和基本URL)添加到坏全局列表中。

您还可以使用它轻松编译所有使用的get / post变量的列表,以帮助您最终用$ _REQUEST ['return_url]替换所有出现的,例如$ return_url;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100000950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档