为什么它在PHP中有效?

时间:2015-11-07 01:33:35

标签: php exploit

这是一个PHP脚本。

<?php

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

?>

输出为 0');echo 1 2 。 似乎 ?> 告诉eval只打印字符串的其余部分。这是正确的行为,还是有人可以解释为什么会这样?

2 个答案:

答案 0 :(得分:2)

?>仅在eval-ed代码中关闭PHP代码,其余的被解释为HTML并且只是发送到浏览器。 eval()期望PHP并且不需要开放<?php,但?>结束PHP。将eval()视为虚拟机,它在具有eval()的页面中独立于PHP执行代码。所以:

<?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

答案 1 :(得分:1)

执行的语句是:

  1. eval(" echo 0?>');echo 1 ");
  2. echo 2;
  3. 第一个与运行此PHP代码非常相似:

    <?php
    
    echo 0
    ?>
    
    '); echo 1
    

    它清楚地打印0后跟'); echo 1

    然后执行第二个语句,打印2