PHP $ _GET ['X']默认为$ X.

时间:2013-07-25 14:46:52

标签: get superglobals register-globals

我自己一直在学习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变量分配给我自己的全局变量?

1 个答案:

答案 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,无论您是否是管理员,您都可以访问该网站的管理部分