什么是 PHP 中的 register_globals?

新手上路,请多包涵

有人可以举例说明 register_globals 是什么吗?

global $user_id; 是否被认为是全球注册?

原文由 sadder 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 295
1 个回答

register_globals 指令:

register_globals 是一个内部 PHP 设置,它将 $_REQUEST 数组的元素注册为变量。如果您通过 POSTGET 在表单中提交一个值,该输入的值将自动通过 PHP 脚本中的变量访问,该变量以输入字段的名称命名.

换句话说,如果您提交了一个包含 username 文本字段的表单,则脚本开头的表达式 ($username === $_POST['username']) 将返回 true

它的臭名昭著是因为它打开了许多安全漏洞,特别是对于那些从安全角度来看不遵循严格编码风格的人。

经典例子:

 if(user_is_admin($user))
{
    $authorized = true;
}

if($authorized)
{
    // let them do anything they want
}

现在,如果您在 Web 浏览器中访问该脚本并且服务器启用了 register_globals ,您只需将 ?authorized=1 附加到 URL 即可启用上帝模式!

global 关键字:

global 是一个与register_globals关系不大的关键字。

下面是它的使用示例:

 $foo = 'bar';

baz();

function baz()
{
    echo $foo; // PHP warns you about trying to use an uninitialized variable
               // and nothing is output (because $foo doesn't exist here)
}

buzz();

function buzz()
{
    global $foo; // Enables the use of $foo in this scope

    echo $foo; // Prints 'bar' to screen
}

原文由 Tim 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏