PHP中的$ var而不是$ _GET ['var']?

Jas*_*vis 3 php

好的,我不记得这方面的细节,但在一些你可以使用的服务器上

$ var而不是$ _GET ['var']访问URL中的变量,我知道这很糟糕但我不记得为什么它不好?

Gum*_*mbo 8

我认为你的意思是Register Globals.

您不应该使用它们,因为您无法区分该变量值的来源,因为它们可能来自EGPCS变量的任何来源(Environment,GET,POST,Cookie,Server).

所以,如果你有一个的$var,你不能,如果值是从说$_ENV['var'],$_GET['var'],$_POST['var'],$_COOKIE['var']$_SERVER['var'].


Ric*_*dle 7

该功能称为Register Globals,它允许人们将变量注入代码中.有关示例,请参阅文档 ; 这是一个:

<?php
// define $authorized = true only if user is authenticated
if (authenticated_user()) {
    $authorized = true;
}

// Because we didn't first initialize $authorized as false, this might be
// defined through register_globals, like from GET auth.php?authorized=1
// So, anyone can be seen as authenticated!
if ($authorized) {
    include "/highly/sensitive/data.php";
}
?>
Run Code Online (Sandbox Code Playgroud)

  • @Gumbo这正是关键所在 - 你必须记住为所有敏感的东西设置默认值.如果没有register_globals,风险就会大大降低 - 忘记将其设置为false并不会使漏洞利用成为可能. (3认同)