如何使用eval()函数执行代码?

时间:2018-09-24 10:34:26

标签: php post eval

因此,我正在为学校项目创建一个简单的在线php代码编辑器。 我们选择自己制作,而不使用像Codemirror这样的库。

因此,基本上,我们有一个很大的textarea,您在其中放置了代码,而不是发送到另一个使用php Eval()函数执行代码的php文件。 但是由于某些原因,当我们尝试发送诸如 Echo,While,If这样的内容时,它会不断发出POST错误。 (错误:500)

简单的事情像:2 + 4执行就好(输出为:6)。

第一个问题是: 是否有可能像我们想使用Eval()一样执行php代码?

第二个是: 有其他方法可以做我们想要的吗?如果是这样,请提供更多信息/代码。

我们当前的代码:

editor.php

<textarea id="area" cols="70" rows="30"></textarea>
<button id="submit">Submit</button>

<script>
    $('#submit').click(function (e) {
        e.preventDefault();

        var info = $('#area').val();

        $.ajax({
            type: "POST",
            url: 'pages/assignments/response.php',
            data: {area: info},
            success: function (response) {
                console.log(response);
            }
        });
    });
</script>

Response.php

<?php
if (!empty($_POST['area'])) {
    runEval($_POST['area']);
};

function runEval($data)
{
//    $data = preg_replace('/\s+/', '', $data); doesn't seem to work at all with it)
    $characters = '[a-zA-Z0-9]*';
    $functions = '';
    $operators = '[\w-><$(){}|_+=":;!&*%$]';
    $regexp = '/^((' . $characters . '|' . $functions . '\s*\((?1)+\)|\((?1)+\))(?:' . $operators . '(?2))?)+/'; /*honestly we have no idea what it does, because we copied it and changed the $characters,$functions,$operators*/

    if (preg_match($regexp, $data)) {
        eval('$result = ' . $data . ';');
        echo $result;
    } else {
        $data = false;
    }
}

?>

1 个答案:

答案 0 :(得分:1)

我认为您复制的代码最初是用于数学或字符串运算的,因为它为变量(eval('$result = ' . $data . ';'))分配了一个值。

尝试删除$result =echo语句,看看是否可行。

从文档中:

  

不得将代码包装在打开和关闭PHP标签中,即   回声“嗨!”;必须传递而不是“”。它是   尽管仍然可以离开并重新进入PHP模式   适当的PHP标签,例如'echo“在PHP模式下!”; ?>在HTML模式下!      

此外,传递的代码必须是有效的PHP。这包括   所有语句必须使用分号正确终止。 '回声   例如,“ Hi!”会导致解析错误,而回声“ Hi!”;”   会起作用。

     

返回声明将立即终止对   代码。

     

该代码将在调用eval()的代码范围内执行。   因此,在eval()调用中定义或更改的任何变量都将保留   终止后可见。

http://php.net/manual/ro/function.eval.php

顺便说一句,请注意,正如docs中的eval()所述,它非常危险,因为它允许在服务器上执行任何种类的有效的PHP代码。

请参阅:

https://security.stackexchange.com/questions/179375/how-eval-in-php-can-be-dangerous-in-web-applications-security