Durante una revisión de código, he encontrado algo similar a esto:
function foo() {
$a = "a";
$expression = '$_GET["$a"]';
return eval('return ('.$expression.');');
}
$a = foo();
echo $a;
No importa el disparate, el ejemplo está simplificado y, debido a las malas decisiones de diseño, el cliente "realmente" necesita la instrucción "devuelva eval".
Mi conjetura sería no, porque $expression
no es $_GET["$a"]
, sino una cadena que representa el nombre de la variable, por lo que el argumento de eval()
es equivalente a una "cadena de retorno".
Pero de acuerdo con el manual de PHP:
Nunca debe usar paréntesis alrededor de su variable de retorno cuando devuelva por referencia, ya que esto no funcionará. Solo puede devolver variables por referencia, no el resultado de una declaración. Si usa
return ($a);
, entonces no está devolviendo una variable, sino el resultado de la expresión($a)
(que es, por supuesto, el valor de$a
).
¿Hay alguna forma de explotar esto?