深入研究有争议的 REGISTER_GLOBALS:深入探究其危险
对于那些不熟悉 PHP 开发的人来说,REGISTER_GLOBALS 可能看起来是一个无害的设置。然而,PHP 开发人员有充分的理由对它表示蔑视。
什么是 REGISTER_GLOBALS?
REGISTER_GLOBALS 使 PHP 脚本能够为通过 GET 或 POST 接收的任何数据自动创建全局变量
为什么如此令人厌恶?
REGISTER_GLOBALS 的主要问题在于它不加区别地将变量转换为全局变量。 PHP 不会将访问未声明的变量视为错误,而是将其视为警告。这可能会滋生安全漏洞。
考虑以下代码片段:
<code class="php">// $debug = true; if ($debug) { echo "query: $query\n"; }</code>
如果没有使用 REGISTER_GLOBALS,访问未声明的 $query 变量将触发警告。然而,当 REGISTER_GLOBALS 处于活动状态时,它会默默地创建一个名为 $query 的全局变量,允许访问数据库查询或用户输入等潜在敏感信息。
低质量代码迫在眉睫的威胁
虽然 REGISTER_GLOBALS 本质上没有问题,但它放大了编写不良的 PHP 代码中存在的漏洞。许多 PHP 脚本缺乏强大的错误处理和变量验证,为恶意行为者利用这些漏洞铺平了道路。
结论:
REGISTER_GLOBALS 是一个应该接近的设置极其谨慎。它引入了重大的安全风险,并导致 PHP 脚本混乱,无法遵守良好的编码实践。停用 REGISTER_GLOBALS 是编写安全且可维护的 PHP 应用程序的关键一步。
以上是为什么 REGISTER_GLOBALS 被认为是 PHP 中的安全风险?的详细内容。更多信息请关注PHP中文网其他相关文章!