register_globals
是一个 PHP 配置选项,用于控制哪些变量可以通过 $_GET
、$_POST
和 $_COOKIE
全局数组访问。这个选项在 PHP 5.4.0 版本中被默认禁用,而在 PHP 5.0.0 版本中启用。
在不同 PHP 版本中的表现如下:
-
PHP 5.0.0 - 5.3.0:在这个版本中,
register_globals
是默认启用的。这意味着所有通过$_GET
、$_POST
和$_COOKIE
传递的变量都会被自动注册为全局变量。这可能会导致安全隐患,因为攻击者可以通过构造特定的请求来访问和修改敏感数据。 -
PHP 5.4.0 - 5.4.45:在这个版本中,
register_globals
默认是禁用的,但可以通过safe_mode
配置选项启用。如果你在这个版本中启用了safe_mode
和register_globals
,那么通过$_GET
、$_POST
和$_COOKIE
传递的变量仍然会被自动注册为全局变量。但是,如果你禁用了safe_mode
,那么register_globals
将不起作用。 -
PHP 5.4.46 - 5.6.0:在这个版本中,
register_globals
仍然是默认禁用的。如果你在这个版本中启用了safe_mode
,那么register_globals
将不起作用。从 PHP 5.6.0 开始,safe_mode
已经被废弃,不再影响register_globals
的行为。 -
PHP 7.0.0 及更高版本:在这个版本中,
register_globals
始终被禁用。这意味着通过$_GET
、$_POST
和$_COOKIE
传递的变量不会自动注册为全局变量。这有助于提高安全性,因为攻击者无法通过构造特定的请求来访问和修改敏感数据。
总之,register_globals
在不同 PHP 版本中的表现主要取决于 PHP 版本本身。在 PHP 7.0.0 及更高版本中,建议始终禁用 register_globals
以提高安全性。在较早的版本中,如果你关心安全性,可以考虑禁用 safe_mode
和 register_globals
。