1 回答
TA贡献1876条经验 获得超6个赞
首先,为了解决代码语法本身的问题,PHP 允许您动态创建变量名称。
假设你有一个变量:
$test = 123;
您可以动态创建对此变量的引用,如下所示:
echo ${'test'}; // Prints '123'
你为什么想做这个?上面的例子毫无意义,但是假设您需要在运行时动态运行一些变量名称:
$var1 = 'A';
$var2 = 'B';
$var3 = 'C';
for ($i = 1; $i <= 3; $i++) {
echo ${'var' . $i};
}
// Prints 'ABC'
既然我们知道了语法的含义,那么它到底\x47\x4c\x4fB\x41\x4c\x53意味着什么呢?
用于\x转义十六进制字符序列。简单来说,您显示的字符串是一堆字符,有人将其表示为十六进制,而不是您习惯看到的人类可读的 ASCII 字符。
如果我们去掉\x逃逸部分,我们就剩下:
474c4fB414c53
据我所知,B这里并不是十六进制的。这给我们留下了:
474c4f 414c53
翻译过来就是:
GLO ALS
如果我们替换B我们得到:
GLOBALS
如果我们将其添加回动态变量引用并再次查看代码,我们会得到:
$GLOBALS['v9800']
这很有趣,因为$GLOBALS是 PHP 中可用的特殊数组,它可以访问全局范围内的所有变量。所以本质上,您的代码正在尝试访问一个名为 的全局变量$v9800。
您必须决定这对您的应用程序意味着什么,但此代码可能是可疑的。可能有人故意使用这种神秘的方法来伪装他们的代码,以尝试访问全局变量。
- 1 回答
- 0 关注
- 67 浏览
添加回答
举报