我正在构建一个在线教学工具,用户可以在其中提交自己的PHP类子类,我要求他们扩展。
我的计划是让用户将代码上传为字符串(这是一个类定义),然后在某些时候使用eval()
运行它。
我想知道是否有办法安全地执行此操作,以便不受信任的代码无法对我的服务器环境执行恶意操作。我不是在寻找涉及容器或多个服务器的复杂虚拟化解决方案......我的应用程序需要非常便携。我希望有一个内置的PHP方法来限制某些代码可以做什么,或者可能有一个已建立的模式来如何“验证”/“清理”代码。我用HTML做过这样的事情,很容易过滤出像<script>
这样的东西,但我不确定是否有像PHP这样的后端语言的模拟。
更新: 根据评论中的链接,听起来像PHP的Runkit是我正在寻找的东西。如果某人有一个如何使用它(或类似的东西)的最小例子,那应该很好地回答我的问题。