你的位置:聚盟网 >> 网络学院 >> 入门 >> 详细内容 在线投稿

浅谈PHP可变变量安全续

www.juoooo.com  2011年11月16日07:49  来源: 互联网   查看:   我要评论(0)  收藏  字号: TTT

Ryat牛在微博上又给出了可变变量的N多例子,有些还真没仔细注意,没想到一个语法特性又牵出了另外一个语法特性,个人觉得这是个BUG。
 
PHP的可变变量无需2次嵌套,一次就可以执行!如下的例子:
 
代码花括号内直接就是phpinfo(),phpinfo函数是不会执行的!
<?php
$a = "${phpinfo()}";
?>
 
而下面Ryat牛给出的几种例子,phpinfo函数执行了!
 
花括号内第一个字符是空格
<?php
$a = "${ phpinfo()}";
?>

花括号内第一个字符是tab
<?php
$a = "${    phpinfo()}";
?>
 
花括号内第一个字符串是注释
<?php
$a = "${/**/phpinfo()}";
?>

 
花括号内第一个字符是回车
<?php
$a = "${
phpinfo()}";
?>
 
花括号内第一个字符是@
<?php
$a = "${@phpinfo()}";
?>

花括号内第一个字符是空格,tab,注释,回车和@的五种情况你能想到什么,抛开经验回归本质,前篇我说了PHP双引号内的内容会再次解析变量,那么可变变量内的花括号就是再次解析语法,然后这个解析语法的关键条件是花括号内的第一个字符!
 
空格,tab,注释,回车是各种语法分析引擎中常见的分割字符,@是PHP语法的一个特殊的容错符号,所以可变变量内的花括号有这么一个规则,需要判断花括号内的内容是否为真正的代码,条件即是文本的第一个字符串是否为PHP语法解析引擎的分割字符和特殊的语法符号!
 
到这里个人感觉这算是语法特性也算是PHP的BUG,再次验证了安全就是基础的理论。
 
摘自:RAyh4c的黑盒子

编辑: 伊小露
分享到:
顶:81 踩:83
【已经有474人表态】
69票
超赞
51票
震惊
59票
不解
55票
愤怒
56票
支持
62票
高兴
52票
无聊
70票
杯具
发表评论

网友评论仅供网友表达个人看法,并不表明本网同意其观点或证实其描述。

查看全部回复【已有0位网友发表了看法】
糗事吧 牛吧 私房话 经典吧
祝福墙许愿墙
随手记-天天记帐本
邀请达人
2013祝福短信,节日祝福语