我自己一直在学习PHP,并且我使用了一个Web主机帐户来测试我的脚本,默认情况下他们有register_globals。我知道这不安全,但在测试示例代码时我并不感到烦恼。
现在,我正在为一个非盈利组织的小型实时网站工作我是其成员,并且他们正在使用的主机默认情况下会关闭register_globals。
所以,现在我的问题。我已经习惯了这个工作(使用register_globals):
假设我们正在加载index.php?pID = 1。 index.php的代码将包含以下行:
if($pID==1) include('content1.php');
请注意,我使用了$ pID而不是$ _GET [' pID']并且我还没有将$ _GET [' pID']分配给$ pID在我的代码中的任何位置。无论如何,这一切都很好。所以(当然)我想知道是不是因为register_globals关闭了,当我在我的org主机上使用相同的代码时,这突然无法正常工作?
如果是这样,是否有办法让superglobals再次变得神奇,或者我必须手动将所有$ _GET变量分配给我自己的全局变量?
答案 0 :(得分:0)
不要尝试实施register_globals
,这是一个巨大的安全漏洞,绝不应该首先实施。因此,为什么它在PHP 5.3中被弃用而在PHP 5.4中被删除。
您无需重新分配变量,只需将其替换为$_GET
等效变量即可。即。
if($pID==1) include('content1.php');
应该成为
if($_GET['pID']==1) include('content1.php');
要说明为什么register_globals
不好,请看一下这个简化的例子:
if(login_success('admin')) {
$admin = 1;
}
if($admin == 1) {
require('super-secret-admin-file.php');
}
由于$admin
永远不会在任何地方初始化,如果register_globals
已开启并且您打开了file.php?admin=1
,无论您是否是管理员,您都可以访问该网站的管理部分