传递给 $_REQUEST 数组中的 php 脚本的十六进制字符串未被解释?
Hex string passed to php script in $_REQUEST array isn't being interpreted?
这是一个非常简单的例子:
$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
shorthand 仅适用于 PHP 中的双引号字符串,但在上面的示例中应该满足该条件。从 $_REQUEST
中读取变量是否会修改任何内容?
转义序列不会在字符串中扩展,它们只会在代码中的字符串文字中扩展。
shell 命令 printf
将处理其格式字符串参数中的转义序列,因此您可以:
passthru("printf '$val'");
您还可以使用 shell 带引号的字符串 $''
来处理转义序列。
passthru("echo $'$val'");
这是一个非常简单的例子:
$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
shorthand 仅适用于 PHP 中的双引号字符串,但在上面的示例中应该满足该条件。从 $_REQUEST
中读取变量是否会修改任何内容?
转义序列不会在字符串中扩展,它们只会在代码中的字符串文字中扩展。
shell 命令 printf
将处理其格式字符串参数中的转义序列,因此您可以:
passthru("printf '$val'");
您还可以使用 shell 带引号的字符串 $''
来处理转义序列。
passthru("echo $'$val'");