跨境电商
经验交流分享

关于PHP4.2.0版本后已经丢弃的“注册全局变量”概念

从开始学习PHP的时候就混淆了Register Globals的意义。注册全局变量的概念和使用global以及超全局变量完全不是一码事情。在下边的例子中,假如Register Globals在配置文件中是打开的话,$authenticated_user变量则可能是任意外部传值到这个脚本中的变量。
比如$_GET[‘authenticated_user’],$_POST[‘authenticated_user’]或者是cookie中的值,我们现在如果读取从外部传过来的值的话,肯定需要知道是从哪里来的这个变量,但是4.2.0之前,我们可能不知道。如果注册全局变量开启的话,可以不使用$_POST[‘uthenticated_user’]来读取外部传值,而直接使用$authenticated_user来获取外部传递的变量。这样做多么危险啊。。。看下边的例子吧。
[PHP]
// 当用户合法的时候,赋值 $authorized = true
if (authenticated_user()) {
$authorized = true;
}
// 由于并没有事先把 $authorized 初始化为 false,
// 当 register_globals 打开时,可能通过GET auth.php?authorized=1 来定义该变量值
// 所以任何人都可以绕过身份验证
if ($authorized) {
include “/highly/sensitive/data.php”;
}
[/PHP]
然后关于PHP的安全问题,如果做到完善的话,就会看到如下代码,之前一直疑问为什么要多此一举,明明知道变量的来源,为什么还非要验证通过其他方式得到值的情况。下例我们虽然知道要获取cookie中的值,但是为了探测有害变量,我们用elseif看是否有人试图通过GET或者POST的方式尝试攻击。非常值得借鉴的一段代码!
[PHP]
if (isset($_COOKIE[‘MAGIC_COOKIE’])) {
// MAGIC_COOKIE 来自 cookie
// 这样做是确保是来自 cookie 的数据
} elseif (isset($_GET[‘MAGIC_COOKIE’]) || isset($_POST[‘MAGIC_COOKIE’])) {
mail(“admin@example.com”, “Possible breakin attempt”, $_SERVER[‘REMOTE_ADDR’]);
echo “Security violation, admin has been alerted.”;
exit;
} else {
// 这一次请求中并没有设置 MAGIC_COOKIE 变量
}
[/PHP]
赞(0)
未经允许不得转载:锐想 » 关于PHP4.2.0版本后已经丢弃的“注册全局变量”概念
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

锐想电商 - 跨境电商经验交流分享

锐想无限