在我的工作场所,我们使用了一段存储在远程服务器上的代码来进行 Clickbank 搜索。现在我的老板决定把所有东西都转移到我们的服务器上,并给了幸运(呵呵)我做这件事的工作。
现在,我一直认为 $_GET 变量需要在本地范围内声明: $var = $_GET['var']; 但是在这段代码中,似乎原始程序员刚刚插入了这一行,他在代码中使用了 $var 而没有声明它......这怎么可能?
在我的工作场所,我们使用了一段存储在远程服务器上的代码来进行 Clickbank 搜索。现在我的老板决定把所有东西都转移到我们的服务器上,并给了幸运(呵呵)我做这件事的工作。
现在,我一直认为 $_GET 变量需要在本地范围内声明: $var = $_GET['var']; 但是在这段代码中,似乎原始程序员刚刚插入了这一行,他在代码中使用了 $var 而没有声明它......这怎么可能?
听起来注册全局变量已打开。在本地注册全局变量范围内的所有请求变量,因此这是可能的。它也是一个非常不安全的功能,自 5.3 版以来已在 PHP 中弃用。
我强烈建议关闭 register_globals 并手动声明本地范围的变量,以便您可以正确处理传入数据的清理和过滤。
有关 register_globals 的更多信息以及为什么在官方 PHP 文档中这是一个坏主意:http: //php.net/manual/en/security.globals.php
这可能是因为设置了 php 设置register_globals
。
这意味着, a在您的代码$_GET['foo']
中自动可用。$foo
在这里查看更多信息:
http://www.php.net/manual/en/ini.core.php#ini.register-globals
基本上这是一个非常大的安全漏洞,应该避免。
此外,它自 5.3 起已弃用,并将在 5.4 中删除。
您可以在此链接 + 关于 register_globals 的简短定义中找到您的答案。