Шестнадцатеричная строка, переданная скрипту php в массиве $ _REQUEST, не интерпретируется? - PullRequest
0 голосов
/ 20 февраля 2020

Вот очень простой пример:

$val = "";

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

print "echo \"$val\"";
passthru("echo \"$val\"");

Я ожидаю, что passthru() напечатает A, если я передам test.php?param=\x41. Однако не похоже, что PHP интерпретирует escape-последовательность и передает "\ x41" в passthru. Я знаю, что сокращение \xAA работает только со строками в двойных кавычках в PHP, но это условие должно выполняться в приведенном выше примере. Изменяет ли чтение переменной из $_REQUEST что-нибудь?

1 Ответ

0 голосов
/ 20 февраля 2020

Escape-последовательности не раскрываются в строках, они раскрываются только в строке литералы в коде.

Команда оболочки printf обработает escape-последовательности в своем аргументе строки формата , так что вы можете сделать:

passthru("printf '$val'");

Вы также можете использовать строку оболочки, заключенную в кавычки с $'', для обработки escape-последовательностей.

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