为了账号安全,请及时绑定邮箱和手机立即绑定

到底是怎么回事?我从来没有见过这样的 PHP 语法:

到底是怎么回事?我从来没有见过这样的 PHP 语法:

PHP
暮色呼如 2024-01-19 15:26:46
我发现这段 php 代码中有一些奇怪的语法:我特别好奇,这是一个什么样的语法?${"\x47\x4c\x4fB\x41\x4c\x53"}['v9800']
查看完整描述

1 回答

?
HUX布斯

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。


您必须决定这对您的应用程序意味着什么,但此代码可能是可疑的。可能有人故意使用这种神秘的方法来伪装他们的代码,以尝试访问全局变量。


查看完整回答
反对 回复 2024-01-19
  • 1 回答
  • 0 关注
  • 78 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信