以文本的方式传入一段代码,怎么对其进行一些简单的检查(比如是否有语法错误,是否实现了 xxx 方法),然后执行这段代码的某个方法?
資深大佬 : zhoudaiyu 3
我觉得有点像类似 oj 的需求,但是好像 oj 没有这些检查?
大佬有話說 (4)
不可信代码安全执行,差不多三种
1. 沙箱(虚拟机、容器)
2. 代码检查(#2,限定一个字集语言,但问题就是黑名单可能导致不安全,白名单可能导致子集语言表达能力减弱)
3. 重新实现一个解释器
注:有些语言本身提供名为沙箱的功能(指 Racket ),实质是解释器。主要是 Lisp 系语言基本都要求支持宏,那就意味着任何一个执行环境都必须包含全套解释器,并且在程序中常常可以完整独立调用解释器的各个部分。那不如直接通过标准库封装成沙箱。
综合来看,代码检查思路比较符合你的要求。