不要这样做。
他们基本上可以访问 PHP 中你能做的任何事情(浏览文件系统,获取/设置任何类型的变量,打开连接到其他机器并插入代码以运行等等...)
eval()
函数很难进行净化,即使你这样做了,也肯定会有绕开它的方法。即使你过滤了exec
,只需要将字符串exec
粘贴到变量中,然后执行$variable()
就可以了。你需要真正地破坏语言才能实现至少某种虚拟的安全性。
如果您使用eval()
执行以下代码,可能会遇到一些大麻烦:
<?php
eval("shell_exec(\"rm -rf {$_SERVER['DOCUMENT_ROOT']}\");");
?>
这只是一个极端的例子,但在这种情况下,您的网站将被删除。希望您的权限不允许,但这有助于说明需要进行清洗和检查。
有很多事情可以说... 这些问题与PHP无关。
这里是简单的答案:
您机器(或数据库)接收的任何输入都需要进行净化处理。
您发布的代码片段基本上允许用户运行他们想要的任何代码,因此特别危险。
这里有一篇非常好的介绍性文章,介绍了代码注入:
绝不要允许在您的服务器上执行未经过滤的代码。
如果您想创建一个工具,以便交互式演示某种语言,例如此处所见的工具:http://tryruby.hobix.com/,建议您自己编写语言的子部分。理想情况下,您将使用它向新程序员演示简单的概念,因此您无需正确实现所有功能。
通过这样做,您可以通过已知可接受输入的白名单来控制输入。如果输入不在白名单上,则不会被执行。
祝您好运!
如已经回答的那样,您需要对输入进行清理。我猜您可以使用某种正则表达式过滤来删除不需要的命令,例如 "exec" 和基本上 PHP 可以提供(或可能被利用)的每个恶意命令,而这是很多的。