首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >register_globals修复

register_globals修复
EN

Stack Overflow用户
提问于 2013-01-03 23:12:35
回答 2查看 9.4K关注 0票数 4

我有一个客户,他有一个网上商店,他希望我来主持。该站点由另一个开发人员编写,并使用了寄存器全局变量。

当我将它上传到我的服务器时,它告诉我它需要启用register_globals,我检查了.htaccess文件,它是。当我询问托管公司时,他们告诉我它已经被删除了,不能在服务器上运行。我不确定代码的哪些部分依赖于它,因为我没有太仔细地研究程序,我只是打算托管它。

有没有快速修复的方法,或者我必须把代码拆开,然后用最新的替代方案来修复它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-04 00:00:25

如果代码使用了寄存器全局变量,并且没有更新到不使用它,那么它可能是很久以前编写的。这意味着:

  1. 它几乎肯定会有大量的安全漏洞;
  2. 它可能使用了其他已被弃用和/或删除的PHP功能;
  3. 它可能是非常混乱的意大利面条代码,而
  4. 它将是一个很难重写的东西来修复所有问题。

<代码>G29

我的建议是找到一个现代购物车软件包,并帮助他建立自己的商店使用,而不是试图保持他现有的古老的软件运行。这可能看起来像是更多的工作,但从长远来看,对于参与其中的每个人来说,这将是更少的麻烦。

如果你必须修复他现有的代码(例如,如果他向你求情,并提出为这项工作支付你很多钱),这里是如何处理注册全局变量的:

Register globals接受所有输入到POST或GET参数中的变量,并将它们创建为全局名称空间中的简单变量。所以你得到的是$id,而不是$_GET['id']

如果程序的编写和文档编制得相当好,那么就不难看出它所期望的变量是什么。在这种情况下,不难怀疑相关变量的$_REQUEST;工作完成了。

但是许多(嗯,大多数)旧的PHP代码只是抛出全局变量,而没有太多关注它们。在站点中加入一堆includes、成百上千行没有function()声明的代码,以及交织在一起的PHP和HTML代码,可能还会加上一些生成Javascript的代码,你通常会得到一个除了原始作者之外的任何人都无法理解的混乱(有时甚至连他们自己也不能理解)。

如果代码看起来像这样,你将是一个非常勇敢的人来尝试修复它。你应该接受它是不可挽回的,然后离开。我在过去的工作中曾被要求修复像这样的旧代码,相信我,在你开始取得进展之前,你可以投入几个月(甚至几年)的时间。在这样的时间尺度下,你就像是从头开始写了一个全新的系统。

票数 6
EN

Stack Overflow用户

发布于 2013-01-03 23:19:15

一个非常难看但非常快速的修复方法如下所示:

代码语言:javascript
复制
foreach (array('_GET', '_POST', '_COOKIE', '_SERVER') as $_SG) {
    foreach ($$_SG as $_SGK => $_SGV) {
        $$_SGK = $_SGV;
    }
}

优选地,在任何其它代码之前,位于可被执行的任何php脚本的顶部。

请注意,这不是我真正推荐的东西。请试着说服你的客户,他们应该得到更好的东西。如果代码需要register_globals,很可能它就像地狱一样不安全……

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

https://stackoverflow.com/questions/14141631

复制
相关文章

相似问题

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