我看了php手册上面说全局变量是建议关闭的,即把regester_globales设置成off
而且手册还举了一个例子,说明如果不关掉会有什么问题,例子如下,但是其中后面的解释部分
的GET auth.php?authorized=1 不知道是什么意思???希望大家帮帮我错误使用 register_globals = on 的例子<?php
// 当用户合法的时候,赋值 $authorized = true
if (authenticated_user()) {
    $authorized = true;
}// 由于并没有事先把 $authorized 初始化为 false,
// 当 register_globals 打开时,可能通过GET auth.php?authorized=1 来定义该变量值
// 所以任何人都可以绕过身份验证
if ($authorized) {
    include "/highly/sensitive/data.php";
}
?>  
当 register_globals = on 的时候,上面的代码就会有危险了。如果是 off,$authorized 就不能通过如 URL 请求等方式来改变,这样就好多了,尽管初始化变量是一个良好的编程习惯。比如说,如果在上面的代码执行之前加入 $authorized = false 的话,无论 register_globals 是 on 还是 off 都可以,因为用户状态被初始化为未经认证。 

解决方案 »

  1.   

    当 regester_globales 开启时 在auth.php?authorized=1 文件中取authorized 就不一定要用GET
    $authorized 就等于 $_GET['authorized']
    我通过url就能定义你的变量 这还安全吗?
    http://bbs.php100.com/read-htm-tid-17163-page-1.html
    http://www.laruence.com/2009/07/13/976.html
    这是另一个例子
      

  2.   

    这个注释说的比较清楚了// 由于并没有事先把 $authorized 初始化为 false,
    // 当 register_globals 打开时,可能通过GET auth.php?authorized=1 来定义该变量值
    // 所以任何人都可以绕过身份验证
    if ($authorized) {
      include "/highly/sensitive/data.php";
    }如果你打开了那个设置,并且通过判断变量 authorized是否为true 的时候为允许 那么只需要在url 构造 authorized=1 即可得到 authorized 为true 的权限。
      

  3.   


    您的意思是把?authorized=1,加在url的后面吧,但是这样的话只会在GET里面生成了一个$_GET["authorized"]=1;
    这样的话,怎么使得authorized=1啊,菜鸟问题望不吝赐教^_^
      

  4.   

    register_globals开了后,$_GET["authorized"]也可以通过$authorized来访问。
    也就意味着,不佳的编码,会被跳过检查。
      

  5.   


    这就是打开和不打开的区别 打开后可以直接 得到 $authorized=1 不再需要 $_GET['authorized'];