эксплуатировать — почему это работает в PHP?

Это скрипт PHP.

<?php

eval(" echo 0?>');echo 1 ");
echo 2;

?>

Выход 0');echo 1 2.
И кажется, что ?> говорит eval просто напечатать остальную часть строки. Это правильное поведение или кто-то может объяснить, почему это происходит?

0

Решение

?> закрывает код PHP только внутри кода eval-ed, а остальное интерпретируется как HTML и просто отправляется в браузер. eval() ожидает PHP и не нуждается в открытии <?php, но ?> заканчивает PHP. Думать о eval() как виртуальная машина, она выполняет свой код независимо от PHP на странице, которая имеет eval(), Так:

<?php         // start executing PHP

// evaluate PHP independently, inside a function
// echo 0
eval(" echo 0
?>            // end PHP execution
');echo 1 "   // output as HTML
);           // end the eval() function execution
echo 2;       // since eval() is complete as a PHP function, continue PHP execution

?>            // end PHP execution
2

Другие решения

Операторы, которые выполняются:

  1. eval(" echo 0?>');echo 1 ");
  2. echo 2;

Первый очень похож на выполнение этого кода PHP:

<?php

echo 0
?>

'); echo 1

И это четко печатает 0 с последующим '); echo 1,

Затем выполняется второе утверждение, которое печатает 2,

1

По вопросам рекламы [email protected]