我正在寻找一种脚本语言:
最终目标是能够运行不受信任的代码,该代码只能使用提供的API,而不会破坏任何内容(例如输入无限循环/消耗过多资源/访问除提供的API之外的任何内容)
我可以使用一些现有的语言吗?
答案 0 :(得分:1)
考虑Bean Scripting Framework,它将为您提供不同语言的选择。
答案 1 :(得分:1)
首先,我想不出任何符合所有这些标准的语言。但分析要求以理解原因可能会有所帮助:
1)可嵌入Java的脚本语言
当然存在可嵌入的脚本语言做,但这取决于您对脚本语言的定义。简单的表达语言会成为“脚本语言”吗?
2)安全(用户将上传他们的脚本,然后在服务器上执行)
这很难。问题是......如果语言实现安全,你怎么能告诉?在简单的情况下(例如“计算器”语言)很容易,但是你如何证明(例如)Rhino Javascript解释器或JRuby或JPython是安全的? (“安全”究竟意味着什么?)
注意:如果您的脚本语言允许脚本调用Java类或(颤抖)本机代码,那么您的问题现在大致相当于在JVM中运行任意不受信任的代码时询问Java是否安全。 (答案是否定的......当然,Java中没有未修补/未发现的安全漏洞。)
3)可以限制每个脚本的执行时间(n秒或n条指令)
这在理论上是可行的,前提是该语言与Java世界的交互非常有限。但是在一般情况下,你会遇到Java“如何安全地停止不合作的线程”问题......标准JVM中没有解决方案。
难以处理的几个方面是:
(并且您还需要考虑可能会破坏您的系统的其他“活动”;例如,创建大型数据结构,锁定主机JVM中的对象,或者设计用于消耗系统级资源的事物;例如,填写文件系统,或耗尽系统的熵池。)
4)具有简单易读的语法
这是你需要自己判断的东西。 (可读性/简单性不能客观地测量......)