热门关键字:   网站安全  黑客攻防  安全漏洞  系统安全  网络安全

浅谈PHP可变变量安全

发布时间:1970-01-01 08:00文章来源:网络文章作者:RAyh4c 点击次数:
摘要:PHP的可变变量无需2次嵌套,一次就可以执行!如下的例子: 代码花括号内直接就是phpinfo(),phpinfo函数是不会执行的! ? php $ a = ${phpinfo()} ; ? 而下面Ryat牛给出的几种例子,phpinfo函数执行了! 花括号内第一个字符是空格 ? php $ a = ${phpinfo()} ;...

PHP的可变变量无需2次嵌套,一次就可以执行!如下的例子:

代码花括号内直接就是phpinfo(),phpinfo函数是不会执行的!

  1. <?php 
  2. $a = "${phpinfo()}"
  3. ?> 


而下面Ryat牛给出的几种例子,phpinfo函数执行了!

花括号内第一个字符是空格

  1. <?php 
  2. $a = "${ phpinfo()}"
  3. ?> 


花括号内第一个字符是tab

  1. <?php 
  2. $a = "${ phpinfo()}"
  3.  
  4. ?> 


花括号内第一个字符串是注释

  1. <?php 
  2. $a = "${/**/phpinfo()}"
  3.  
  4. ?>  
花括号内第一个字符是回车
  1. <?php 
  2. $a = "${ 
  3. phpinfo()}"; 
  4.  
  5. ?> 


花括号内第一个字符是@

  1. <?php 
  2. $a = "${@phpinfo()}"
  3.  
  4. ?>  


花括号内第一个字符是空格,tab,注释,回车和@的五种情况你能想到什么,抛开经验回归本质,前篇我说了PHP双引号内的内容会再次解析变量,那么可变变量内的花括号就是再次解析语法,然后这个解析语法的关键条件是花括号内的第一个字符!

空格,tab,注释,回车是各种语法分析引擎中常见的分割字符,@是PHP语法的一个特殊的容错符号,所以可变变量内的花括号有这么一个规则,需要判断花括号内的内容是否为真正的代码,条件即是文本的第一个字符串是否为PHP语法解析引擎的分割字符和特殊的语法符号!

到这里个人感觉这算是语法特性也算是PHP的BUG,再次验证了安全就是基础的理论。

标签分类:

上一篇:sqlcmd脱mssql数据库方法
下一篇:入侵检测之后台另类注入