register_globals
是一个 PHP 配置选项,用于控制哪些全局变量可以通过 $_GET
、$_POST
和 $_COOKIE
等超全局数组访问。自 PHP 5.4.0 起,register_globals
默认被关闭,以提高安全性。如果你的旧代码依赖于 register_globals
,你需要进行一些修改以确保代码在新版本的 PHP 中正常工作。
以下是一些建议,帮助你迁移旧代码以适应 register_globals
的关闭:
检查并替换全局变量:
$variable
来访问全局变量,你需要确保这些变量在 $_GET
、$_POST
或 $_COOKIE
中存在。isset()
或 empty()
函数来检查变量是否存在,并使用 $_GET
、$_POST
或 $_COOKIE
数组来访问它们。例如,将 $HTTP_GET_VARS['variable']
替换为 $_GET['variable']
(如果适用)。更新变量赋值:
$GLOBALS['variable'] = 'value';
替换为 $_GLOBALS['variable'] = 'value';
(注意:$_GLOBALS
和 $GLOBALS
是相同的,但前者更常用)。处理来自 URL 的参数:
$_GET
数组来访问这些值,并对其进行适当的验证和清理。处理来自表单的提交:
$_POST
数组来访问它们。确保对提交的数据进行验证和清理,以防止跨站脚本攻击(XSS)和其他安全问题。处理来自 cookies 的值:
$_COOKIE
数组来访问它们。同样,确保对 cookie 值进行验证和清理。测试代码:
register_globals
的情况下仍然按预期工作。考虑使用预处理语句:
考虑使用更安全的功能:
filter_input()
和 filter_var()
,来清理和验证输入数据。考虑升级 PHP 版本:
总之,迁移旧代码以适应 register_globals
的关闭需要仔细检查和更新代码中的全局变量访问方式。通过遵循上述建议并进行充分的测试,你可以确保你的代码在新版本的 PHP 中安全且可靠地运行。