每个人都说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
应该在一个完全隔离的实例中使用。
还有更复杂的选择,比如使用一个只允许执行安全和预先批准的函数的解析器。