我正在研究几年前建立的应用程序,这最近停止了正确的工作。老程序员说,他可能正在访问 $_GET 或者 $_POST 变量而无需阅读它们 $_GET[] array, ,但是通过 register_globals

我想问:访问哪些不同的方法 $_GET 变量不使用 $_GET[] 数组(例如直接方法?),如果知道,我该如何检查此应用程序是否使用它们?

先感谢您

编辑: :我记得的其他方式是 register_globals, , 不是 magic_quotes. 。另外,我不想 用它, ,而是检测是否使用过,并在最新的服务器更新中进行了弃用(什么 可以 解释为什么应用程序停止正常工作)

编辑: :我的英语今天很恐怖。正如我在一个答案中解释的那样: 我需要检查原始程序员是否使用了从查询字符串到PHP的变量获取变量的某些晦涩和/或不推荐的方法,因此值应用程序现在可以使用错误/不初始化

重要编辑: import_request_variables 不在桌子上,没有使用。全部 $_ 阵列也不在桌子上,因为最新更新不会打破它们(=>它们仍然可以工作)。我如何检测使用哪些变量的初始化 register_globals?

另一个编辑: : 我找到了这个:

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

它可能被其中之一打破了吗 最新的 更新(最多1周前)?

有帮助吗?

解决方案

你的意思是 注册全球 并不是 魔术报价... BTW注册全球是纯粹的邪恶 绝不 使用它们(并从php 5.3.0处弃用它们)!

编辑: 如果您想检查应用程序是否使用了Globals的应用程序,请尝试搜索 $_GET 值为变量。例如 index.php?id=123 尝试寻找 $id 在PHP代码中。如果您发现它,这并不意味着脚本使用注册globals,而是 $id 来自无处不在,从不初始化/设置,这是一个好(坏!),该应用程序使用登记册的范围...

其他提示

$_SERVER["QUERY_STRING"] 会给您原始的弦字符串。

也就是说,这听起来像是应该解决的问题,而不是通过使用其他变量。

如果魔术报价是一个问题,请检查是否已启用它们,并相应地处理传入数据。

禁用魔术报价 PHP手册中的页面显示了一种“修复”传入数据的方法,具体取决于功能是否已激活。对于大量数据来说,这不是很有效,但应该在日常任务中完成。

你也有 $ _request, magic_quotes (弃用)只会影响变量的内容,而不是捕获它们的手段。

也看 import_request_variables, ,原始编码器可能已使用它来获取GET变量的内容,并将其插入另一个变量中,然后将其插入该变量。

注册Globals是较旧的PHP程序经常依靠的可怕功能。

随着寄存器的打开,PHP将查看GET和POST变量,并将它们“促进”到普通变量名称 - 例如 $_GET['myvar'] 在代码中可以访问 $myvar.

除其他问题外,这使黑客简单地通过猜测程序员可能使用的其他变量名称即可使该程序非常容易打破。因此,默认情况下已将寄存器全球功能关闭,现在已正式弃用,并将在将来的版本中完全删除。

因为使用这种方式的变量以与普通变量无法区分的方式引用,因此这意味着尝试更新使用寄存器全球仪的旧代码可能非常困难。这确实取决于编写代码的效果。

问题可能是 PHP的 register_globals. 。此选项可以 $_GET['some_var'] 或他们的等效 $_POST 版本可用 $some_var 自动地。这是弃用的,您绝对不应该使用它,但是其他程序员可能在该应用程序中使用了它们。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top