您现在的位置是:首页 > 极限百科 > register_globals(了解register_globals)

register_globals(了解register_globals)

jk​​​​​​​943人已围观日期:2023-05-24 11:02:05

register_globals(了解register_globals)很多人对这个问题比较感兴趣,这里,极限生活记小编 jk就给大家详细解答一下。

register_globals(了解register_globals)

了解register_globals

什么是register_globals?

register_globals是一个早期PHP配置选项,它为全局变量设置了一个开关,让您可以轻松地将Web表单中的变量自动转换为全局PHP变量。也就是说,当开启了register_globals时,您可以直接使用表单名作为变量名在脚本中访问表单中的元素值。

问题与风险

register_globals在其早期版本中是默认开启的,这似乎是一个方便的开箱即用的功能。但是,register_globals在实现上有一些安全漏洞和缺陷,这可能导致严重的安全风险和数据损失。例如,register_globals使得$_REQUEST、$_GET、$_POST、$_SESSION和$_COOKIE等数组中的任何变量都可以自动转换为全局变量,并且没有任何过滤和检查机制,这可能导致以下问题:

  • 全局变量引入攻击(register_globals攻击);
  • 对敏感信息的意外修改(包括用户密码,安全cookie等);
  • 完全依赖表单输入(不安全的消毒)

如何避免register_globals风险

避免register_globals风险的最好方式是关闭它。您可以在PHP配置文件php.ini中将register_globals选项设置为Off。如果您不具备改变PHP配置选项的权限,则可以在脚本中设置以下代码:

``` if (ini_get('register_globals')) { foreach ($_REQUEST as $key => $value) { unset($GLOBALS[$key]); } } ```

上述代码将循环遍历超全局变量$_REQUEST中的所有键和值。在每个循环中,代码将使用unset语句将该键从$GLOBALS数组中删除。通过执行上述代码,您可以确保register_globals不会自动将任何变量转换为全局变量。

结论

register_globals在早期PHP版本中是顺机的,但是由于它的安全漏洞和缺陷,我们建议关闭register_globals选项以减少风险。如果您无法关闭register_globals,则应在脚本中使用上述代码来手动消毒超全局变量。通过正确的消毒方法,我们可以确保表单中的数据有效、安全,并且不会由于register_globals漏洞导致意外数据损失。

关于register_globals(了解register_globals) jk就先为大家讲解到这里了,关于这个问题想必你现在心中已有答案了吧,希望可以帮助到你。