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

admin 2024年10月18日08:55:39评论12 views字数 1106阅读3分41秒阅读模式

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

下面是动态变量的示例:

<?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变量安全之动态变量覆盖

开发人员在平时开发过程中多多少少会使用一些动态变量,然而使用不当将会造成变量覆盖,所以应该尽量避免使用PHP的动态变量。

下面代码示例中的动态变量就属于使用不当的情况。

<?php    foreach($_POST as $key => $value){      $$key = $value; //造成动态变量覆盖    }  if(authenticated_user()){ //认证用户是否登录        $authorized = true;    }?>

当用户提交的参数中包含authorized = true时,在执行authenticated_user()步骤之前,authorized的值已经被设置为true,因此用户在无须通过校验的情况下即可直接向下执行,绕过了校验逻辑,造成任意越权访问的后果。

为了避免全局变量覆盖的发生,应尽量不使用动态变量接收客户端参数。

修复后的代码(这段代码第二次出来,大家发现在哪篇文章的建议修复代码是下面的呢?可以留言哟,有惊喜)。

<?php    $username = $_POST['username'];    $password = $_POST['password'];    if(authentcated_user($username,$password)){ //认证用户是否登录        $authorized = true;    }

诚招志同道合的徒弟,还一片教育的净土。

打败你的不是学费,而是“回去再考虑考虑”。如果时光倒退10年,你最想做的事是什么?

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

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

学习内容:Web漏洞挖掘、CTF、二进制、逆向、代码审计、免杀等。深耕红蓝紫对抗、渗透攻击链、漏洞分析与挖掘、红队武器开发、二进制安全等。

学成:加入团队做项目、内推、护网、工作。

方式:手把手,一对一咨询。

非诚勿扰,请扫描下方二维码或添加微信:yuanchao2015

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

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

原文始发于微信公众号(船山信安):原创 | PHP变量安全之动态变量覆盖

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月18日08:55:39
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   原创 | PHP变量安全之动态变量覆盖https://cn-sec.com/archives/3284014.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息