通过AJAX评估PHP

时间:2010-12-11 15:06:17

标签: php javascript ajax eval

我有什么和想做什么

  • 我有input area

  • 我有一个JS脚本,它读取input area的{​​{1}}并使用innerHTML对其进行编码,然后将值发送到encodeURICompontent;

  • 我有一个evaluate.php?code=+value evaluate.php来自网址的GET的值,并使用code向javascript返回一个评估值。< / p>

  • 最后,它将eval($code)置于xmlHttp.responseText

但执行eval时出现此错误:

  

解析错误:语法错误,意外''',期待/Applications/MAMP/htdocs/Apps/editor/includes/exe.php(5)中的T_STRING:第1行的eval()代码

Evaluate.php

div

我尝试评估的价值只是:

if(isset($_GET["code"])){
    $e = $_GET["code"];
    echo eval($e);
}

然后这在echo "Hello World!"; 中看起来像:

$_GET["code"]

3 个答案:

答案 0 :(得分:1)

显然,您要评估的字符串中存在错误。尝试先输出它,看它是否有半列和类似的东西。

但是你永远不应该(!)评估你从URL获得的代码!永远不要,任何人都可以发送“exec('rm -rf /')".

答案 1 :(得分:1)

我很难回答这个问题。在您的PHP设置中,可能会启用magic_quotes_gpc,通过转发来“破坏”您的传入数据。

为了让它发挥作用,您可能希望通过禁用魔术引号为您的事业添加更多的不安全感。

如果这不能解决问题,请按照Silver Light的建议调试输入。

答案 2 :(得分:1)

根据PHP的文档:

  

eval()返回NULL,除非返回   在评估的代码中调用,其中   case传递给return的值是   回。如果有解析错误   评估的代码,eval()返回   FALSE并执行以下操作   代码继续正常。它不是   可能会捕获一个解析错误   eval()使用set_error_handler()。

所以我认为运行echo eval($e)时可能会出现问题。

P.S。除非在这些引号中包含变量,否则最好不要在PHP中使用双引号。例如,使用"Hello, $name"并使用'Hello, Bob'