传递给 $_REQUEST 数组中的 php 脚本的十六进制字符串没有被解释?



这里有一个非常简单的例子:

$val = "";
if(array_key_exists("param", $_REQUEST)) {
$val = $_REQUEST["param"];
}
print "echo "$val"";
passthru("echo "$val"");

如果我通过test.php?param=x41,我希望passthru()打印A。然而,看起来PHP并没有解释转义序列并将"\x41"传递给passthru。我知道xAA简写只适用于PHP中的双引号字符串,但在上面的例子中应该满足这个条件。从$_REQUEST中读取变量会修改什么吗?

Escape序列不在字符串中展开,它们只在代码中的字符串文本中展开。

shell命令printf将在其格式字符串参数中处理转义序列,因此您可以执行以下操作:

passthru("printf '$val'");

您还可以使用用$''引用的shell字符串来处理转义序列。

passthru("echo $'$val'");

相关内容

  • 没有找到相关文章

最新更新