专栏名称: 衡阳信安
船山院士网络安全团队唯一公众号,为国之安全而奋斗,为信息安全而发声!
目录
相关文章推荐
哲学王  ·  中国抑郁症患者已超过一亿 ·  8 小时前  
哲学园  ·  DeepSeek,根之技术 ·  昨天  
哲学王  ·  罗素:拼命工作是奴隶的道德 ·  3 天前  
51好读  ›  专栏  ›  衡阳信安

原创 | PHP变量安全之动态变量覆盖

衡阳信安  · 公众号  ·  · 2024-10-18 00:00

正文

PHP动态变量是指一个变量的变量名可以动态地设置和使用,一个变量获取另一个变量的值作为这个变量的变量名。

下面是动态变量的示例:

    $Bar = "a";    $Foo = "Bar";    $World = "Foo";    $Hello = "World";    $a = "Hello";      echo $a;            //输出Hello    echo "\n";    echo $$a;           //输出World    echo "\n";    echo $$$a;          //输出Foo    echo "\n";    echo $$$$a;         //输出Bar    echo "\n";    echo $$$$$a;        //输出a    echo "\n";    echo $$$$$$a;       //输出Hello    echo "\n";    echo $$$$$$$a;      //输出World

开发人员在平时开发过程中多多少少会使用一些动态变量,然而使用不当将会造成变量覆盖,所以应该尽量避免使用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年,你最想做的事是什么?

毫无疑问,那是你错过了选择,选择比努力更重要!

保证:优质的价格、增值的服务、技术的天堂







请到「今天看啥」查看全文