PHP动态变量是指一个变量的变量名可以动态地设置和使用,一个变量获取另一个变量的值作为这个变量的变量名。
下面是动态变量的示例:
$Bar = "a";
$Foo = "Bar";
$World = "Foo";
$Hello = "World";
$a = "Hello";
echo $a;
echo "\n";
echo $$a;
echo "\n";
echo $$$a;
echo "\n";
echo $$$$a;
echo "\n";
echo $$$$$a;
echo "\n";
echo $$$$$$a;
echo "\n";
echo $$$$$$$a;
开发人员在平时开发过程中多多少少会使用一些动态变量,然而使用不当将会造成变量覆盖,所以应该尽量避免使用PHP的动态变量。
下面代码示例中的动态变量就属于使用不当的情况。
foreach($_POST as $key => $value){
$$key = $value;
}
if(authenticated_user()){
$authorized = true;
}
?>
当用户提交的参数中包含authorized = true时,在执行authenticated_user()步骤之前,authorized的值已经被设置为true,因此用户在无须通过校验的情况下即可直接向下执行,绕过了校验逻辑,造成任意越权访问的后果。
为了避免全局变量覆盖的发生,应尽量不使用动态变量接收客户端参数。
修复后的代码(这段代码第二次出来,大家发现在哪篇文章的建议修复代码是下面的呢?可以留言哟,有惊喜)。
$username = $_POST['username'];
$password = $_POST['password'];
if(authentcated_user($username,$password)){
$authorized = true;
}
诚招志同道合的徒弟,还一片教育的净土。
打败你的不是学费,而是“回去再考虑考虑”。如果时光倒退10年,你最想做的事是什么?
毫无疑问,那是你错过了选择,选择比努力更重要!
保证:优质的价格、增值的服务、技术的天堂