代码之家  ›  专栏  ›  技术社区  ›  Adam Kiss

如何在PHP中获取$get变量

  •  3
  • Adam Kiss  · 技术社区  · 14 年前

    我正在研究多年前构建的应用程序,它最近已停止正常工作。老程序员说,他可能正在访问 $_GET $_POST 不读取变量 $_GET[] array ,但通过 register_globals

    我想问:有哪些不同的访问方式 $获取 不使用变量 $_GET[] 阵列(例如直接方式?)而且,如果知道,我如何检查这个应用程序是否使用了其中的任何一个?

    提前谢谢你

    编辑 :我记得的其他方式是 注册全局 ,不是 magic_quotes . 另外,我不想 使用它 ,而是检测它是否被使用,并且在最新的服务器更新中不推荐使用(what 能够 解释为什么应用程序停止正常工作)

    编辑 :我今天的英语很糟糕。正如我在其中一个答案中所解释的: 我需要检查原始程序员是否使用了一些模糊和/或不推荐的方法将变量从查询字符串获取到PHP,因此应用程序现在使用的值是错误的/未初始化的

    重要编辑 : import_request_variables 不在桌子上,不用。全部 $_ 数组也不在表中,因为最新的更新不会破坏它们(=>它们仍然可以工作)。如何检测用什么初始化变量 注册全局 ?

    又一次编辑 :我发现这个:

    foreach ($_POST as $k => $v) {
      eval("\$".$k." = '".$v."';");
    }
    foreach ($_GET as $k => $v) {
      eval("\$".$k." = '".$v."';");
    }
    

    它是不是被一个 最新的 更新(最多一周前)?

    5 回复  |  直到 14 年前
        1
  •  4
  •   AlexV    14 年前

    你的意思是通过 Register Globals 而不是 Magic Quotes ... 顺便说一句,注册全局是纯粹的邪恶 从未 使用它们(从PHP 5.3.0开始就不推荐使用它们)!

    编辑: 如果要检查应用程序是否使用Register Globals,请尝试搜索 $_GET 作为变量的值。例如 index.php?id=123 努力寻找 $id 在PHP代码中。如果找到它,这并不意味着脚本使用Register Globals,但是如果 $id号 不知从何而来,从未初始化/设置它是一个好(坏!)签署应用程序使用注册全局参数。。。

        2
  •  2
  •   Pekka    14 年前

    $_SERVER["QUERY_STRING"] 会给你一根生的绳子。

    也就是说,这听起来像是一个应该从根本上解决的问题,而不是使用不同的变量。

    如果存在幻数引号问题,请检查它们是否已启用,并相应地处理传入的数据。

    这个 Disabling Magic Quotes PHP手册中的第页显示了一种根据功能是否激活来“修复”传入数据的方法。对于大量的数据来说,它不是很有效,但是应该在日常任务中完成。

        3
  •  2
  •   SW4    14 年前

    你也有 $_REQUEST , magic_quotes (已弃用)只会影响变量的内容,而不会影响捕获变量的方式。

    另见 import_request_variables ,原始编码器可能使用它获取GET变量的内容,并将其插入另一个随后被引用的变量中。

        4
  •  1
  •   Spudley Pat    14 年前

    Register Globals是一个老PHP程序经常依赖的可怕特性。

    打开register globals后,PHP将查看GET和POST变量,并将它们“提升”为普通变量名-例如 $_GET['myvar'] 在代码中可以访问为 $myvar .

    在其他问题中,这使得黑客很容易通过猜测程序员可能使用的其他变量名来破解程序。因此,register globals功能在默认情况下已经关闭了很长一段时间,现在已正式弃用,并将在将来的版本中完全删除。

    由于以这种方式使用的变量的引用方式与普通变量不可区分,这意味着尝试更新使用register globals的旧代码可能非常困难。这在很大程度上取决于代码编写的好坏。

        5
  •  1
  •   jwueller    14 年前

    问题可能是 PHP's register_globals . 这个选项使 $_GET['some_var'] 或他们的同类产品 $_POST 可用版本为 $some_var 自动。这是不推荐的,您绝对不应该使用它,但其他程序员可能已经在该应用程序中使用了它们。

    推荐文章