PHP - eval的最佳替代品

时间:2014-03-09 16:15:18

标签: php

每个人都说Eval真的很危险,这就是为什么我在寻找另一种选择。

我正在构建一个脚本,允许用户在textarea上编写代码以在浏览器中查看结果。

我在这里问过解决方案,很多人都告诉我,Eval做我想做的事。

我实际上正在使用Eval,它运行得非常好,但是真的很危险,因为有些用户可以放置一些恶意代码,破解所有网站,输入我的数据库等等......

恢复,我想找到一些替代eval,有没有办法建立一个更安全的脚本?

<!-- Textarea for the code !-->
Code
<form method="GET">
<textarea name="code">

</textarea>
<input name="code" type="submit" />
</form>
<br>

<!-- Column with the results !-->
Result
<br>
<?php

if(isset($_GET["codebtn"])) {

  eval('?>' . $_GET["code"] .'<?php');

  }
?>

1 个答案:

答案 0 :(得分:0)

一般来说,不应使用eval。最着名的是PHP的创建者Rasmus Lerdorf说:

  

如果eval()就是答案,那么你几乎肯定会问错误的问题。

这样做的原因是,通常您正在寻找具有有限用户输入的特定用例的解决方案,可以在不使用eval的情况下安全地满足该解决方案。

在您的情况下,例外情况是,您希望为PHP创建基于Web的测试区域,其目的是运行用户的代码。

这里应该使用eval的唯一方法是在一个完全孤立的实例中。

有更多复杂的选项可用,例如使用仅允许执行安全和预先批准的功能的解析器。