Java 脚本语言-在服务器上执行

Java 脚本语言-在服务器上执行,java,scripting-language,Java,Scripting Language,我正在寻找一种脚本语言: 一种可嵌入Java的脚本语言 实际上,我指的是一些不会作为本机代码执行,但会被解释的代码 安全(用户将上载脚本,然后在服务器上执行) 无法访问某些“沙箱”之外的任何内容,无法访问线程、I/O等 只是流控制+算法/数据结构(可能是一些预定义的“类”,如集合)+与显式提供的API的交互 可以限制每个脚本的执行时间(n秒或n条指令) 如果语言被翻译,这是可能的。例如:将每条指令替换为“检查是否应执行下一条指令并执行它或退出” 具有简单易读的语法 最终目标是能够运行

我正在寻找一种脚本语言:

  • 一种可嵌入Java的脚本语言
    • 实际上,我指的是一些不会作为本机代码执行,但会被解释的代码
  • 安全(用户将上载脚本,然后在服务器上执行)
    • 无法访问某些“沙箱”之外的任何内容,无法访问线程、I/O等
    • 只是流控制+算法/数据结构(可能是一些预定义的“类”,如集合)+与显式提供的API的交互
  • 可以限制每个脚本的执行时间(n秒或n条指令)
    • 如果语言被翻译,这是可能的。例如:将每条指令替换为“检查是否应执行下一条指令并执行它或退出”
  • 具有简单易读的语法
  • 最终目标是能够运行不受信任的代码,这些代码应该只能使用提供的API,而不会破坏任何东西(比如进入无限循环/消耗太多资源/访问除提供的API之外的任何东西)


    有一些现有的语言我可以使用吗?

    考虑一下,它将为您提供不同语言的选择。

    首先,我想不出任何语言能够满足所有这些标准。但分析需求可能有助于理解为什么:

    1) 一种可嵌入Java的脚本语言

    当然,可嵌入脚本语言确实存在,尽管这取决于您对脚本语言的定义。简单的表达式语言是“脚本语言”吗

    2) 安全(用户将上载脚本,然后在服务器上执行)

    这很难。问题是。。。如何判断语言实现是否安全?在简单的情况下(例如“计算器”语言),这很容易,但您如何证明(比如)Rhino Javascript解释器、JRuby或JPython是安全的?(那么“安全”到底是什么意思?)

    注意:如果脚本语言允许脚本调用Java类或(抖动)本机代码,那么现在的问题大致相当于询问Java在JVM中运行任意不受信任的代码时是否安全。(答案是否定的……当然不是,因为Java中存在未修补/未发现的安全漏洞。)

    3) 可以限制每个脚本的执行时间(n秒或n条指令)

    这在理论上是可能的,前提是该语言与Java世界的交互非常有限。但在一般情况下,您会遇到Java“如何安全地停止不合作线程”问题。。。在标准JVM中没有解决方案

    难以处理的几个方面是:

    • 任何涉及线程的东西
    • 脚本到Java方法调用需要很长时间
    • 阻塞I/O

    (您还需要考虑其他可能破坏系统的活动);例如,创建巨大的数据结构,在主机JVM中锁定对象,或者做一些用来消耗系统级资源的事情;例如填写文件系统,或者耗尽系统的熵池。 4) 具有简单易读的语法


    这是你需要自己判断的。(可读性/简单性无法客观衡量…

    我认为Java天生就支持JavaScript。@优越性-我认为只有Java的最新版本。此外,这只涉及第一个标准。我会在我的问题中澄清,我理解你的担忧