首页  >  文章  >  php教程  >  浅谈PHP变量可用字符

浅谈PHP变量可用字符

WBOY
WBOY原创
2016-06-06 19:53:061713浏览

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 先来说说php变量的命名规则,百度下一抓一大把: (1) PHP的变量名区分大小写; (2) 变量名必须以美元符号$开始; (3) 变量名开头可以以下划线开始; (4) 变量名不能以数字字符开头。 其实所

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入

  先来说说php变量的命名规则,百度下一抓一大把:

  (1) PHP的变量名区分大小写;

  (2) 变量名必须以美元符号$开始;

  (3) 变量名开头可以以下划线开始;

  (4) 变量名不能以数字字符开头。

  其实所有编程都类似的命名规范就是:

  1. 变量第一个字符最好是 字母或_,不能以数字开头

  2. 第二个字符开始允许 数字,字母,_

  好了,差不多就是这样了,但是这不是我们要说的重点。

  今天我们说说 PHP 变量的可用字符,不仅仅是 数字,字母,_ 哦。

  前几天QQ上一朋友发我一个shell,是加密过的,通篇乱码,不过上面有注释,叫做 "神盾加密" 好霸气的样子。

  里面用了一些比较生僻的知识点,其中最明显的就是变量名,所以今天我们先从变量开始讲。

  当然网上我也没找到权威的质料强有力的说明PHP的变量名可用字符的信息,所以我只能自己测试了。(英文不好,没办法谷歌到有利的证据)

  先来看下我所用的方法,(如果你有更好的方法,希望分享下。)

  

  if ($_POST) {

  $chr = chr($_POST['chr']);

  eval('$'.$chr."=1;");

  echo 'ok';

  exit;

  }

  ?>

  

  

  

  

  

test

  

  

  

  <script></script>

  for(var i = 0x00; i

  $.ajaxSettings.async = false; // 同步模式, 为了按顺序返回数据

  $.post( "?", {chr: i}, (function (data) { // post i 给 php 解析

  data === 'ok' && console.log( "\\x"+(i)。toString(16) ); // 如果只返回 ok 说明能正常执行,否则会抛出异常

  });

  }

  

  

  

  代码还算比较简单,PHP 部分只负责解析每一个字符当作变量名的执行结果是否会抛出溢出。

  比如 字符 a 那么会解析  eval('$a=1;');  这样的结果肯定没问题,所以不会抛出异常,返回结果就是 ok 字符。

  如果 字符 - 那么会解析  eval('$-=1;');  这明显是不对的,所以会抛出  PHP Parse error: syntax error, unexpected '-', expecting T_VARIABLE or '$'  和 ok 字符。

  而下面的 ajax 部分者正是利用返回结果是否为 'ok' 而判断是否是有效的变量名。

  看看执行后的结果是什么吧:

  "\x41, \x42, \x43, \x44, \x45, \x46, \x47, \x48, \x49, \x4a, \x4b, \x4c, \x4d, \x4e, \x4f, \x50, \x51, \x52, \x53, \x54, \x55, \x56, \x57, \x58, \x59, \x5a, \x5f, \x61, \x62, \x63, \x64, \x65, \x66, \x67, \x68, \x69, \x6a, \x6b, \x6c, \x6d, \x6e, \x6f, \x70, \x71, \x72, \x73, \x74, \x75, \x76, \x77, \x78, \x79, \x7a, \x7f, \x80, \x81, \x82, \x83, \x84, \x85, \x86, \x87, \x88, \x89, \x8a, \x8b, \x8c, \x8d, \x8e, \x8f, \x90, \x91, \x92, \x93, \x94, \x95, \x96, \x97, \x98, \x99, \x9a, \x9b, \x9c, \x9d, \x9e, \x9f, \xa0, \xa1, \xa2, \xa3, \xa4, \xa5, \xa6, \xa7, \xa8, \xa9, \xaa, \xab, \xac, \xad, \xae, \xaf, \xb0, \xb1, \xb2, \xb3, \xb4, \xb5, \xb6, \xb7, \xb8, \xb9, \xba, \xbb, \xbc, \xbd, \xbe, \xbf, \xc0, \xc1, \xc2, \xc3, \xc4, \xc5, \xc6, \xc7, \xc8, \xc9, \xca, \xcb, \xcc, \xcd, \xce, \xcf, \xd0, \xd1, \xd2, \xd3, \xd4, \xd5, \xd6, \xd7, \xd8, \xd9, \xda, \xdb, \xdc, \xdd, \xde, \xdf, \xe0, \xe1, \xe2, \xe3, \xe4, \xe5, \xe6, \xe7, \xe8, \xe9, \xea, \xeb, \xec, \xed, \xee, \xef, \xf0, \xf1, \xf2, \xf3, \xf4, \xf5, \xf6, \xf7, \xf8, \xf9, \xfa, \xfb, \xfc, \xfd, \xfe, \xff"

[1] [2] 

浅谈PHP变量可用字符

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn