PHP——eval的最佳替代品


PHP - The best substitute to eval

每个人都说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');
  }
?>

作为一般规则,不应该使用eval。最著名的是,PHP的创造者Rasmus Lerdorf说:

如果eval()是答案,那么几乎可以肯定你问错了问题。

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

例外,在你的情况下,当你想为PHP创建一个基于web的测试区域,其全部目的是运行用户的代码。

eval应该在一个完全隔离的实例中使用。

还有更复杂的选择,比如使用一个只允许执行安全和预先批准的函数的解析器。