这里有一个非常简单的例子:
$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'");