每个人都说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');
}
?>
答案 0 :(得分:0)
一般来说,不应使用eval
。最着名的是PHP的创建者Rasmus Lerdorf说:
如果eval()就是答案,那么你几乎肯定会问错误的问题。
这样做的原因是,通常您正在寻找具有有限用户输入的特定用例的解决方案,可以在不使用eval
的情况下安全地满足该解决方案。
在您的情况下,例外情况是,您希望为PHP创建基于Web的测试区域,其目的是运行用户的代码。
这里应该使用eval
的唯一方法是在一个完全孤立的实例中。
有更多复杂的选项可用,例如使用仅允许执行安全和预先批准的功能的解析器。