【问题标题】:scripting language - to execute on the server脚本语言 - 在服务器上执行
【发布时间】:2013-05-05 11:58:42
【问题描述】:

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

  1. 一种可嵌入 Java 的脚本语言
    • 实际上我的意思是不会作为本机代码执行,而是解释的东西
  2. 安全(用户将上传他们的脚本,然后在服务器上执行)
    • 无法访问某些“沙盒”之外的任何内容,无法访问线程、I/O 等。
    • 只是流控制 + 算法/数据结构(可能是一些预定义的“类”,如集合)+ 与明确提供的 API 的交互
  3. 可以限制每个脚本的执行时间(n 秒或 n 条指令)
    • 如果语言被解释,这是可能的。例如:将每条指令替换为“检查我是否应该执行下一条指令并执行或退出”
  4. 语法简单易读

最终目标是能够运行不受信任的代码,这些代码应该只能使用提供的 API,而不会破坏任何东西(比如进入无限循环/消耗太多资源/访问除了提供的 API 之外的任何东西)

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

【问题讨论】:

  • 我认为 Java 原生支持 JavaScript。
  • @Supericy - 我认为只有 Java 的最新版本。此外,这仅解决了第一个标准。

标签: java scripting-language


【解决方案1】:

考虑Bean Scripting Framework,它将为您提供不同语言的选择。

【讨论】:

    【解决方案2】:

    首先,我想不出任何符合所有这些标准的语言。但分析需求以了解原因可能会有所帮助:

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

    确实存在可嵌入的脚本语言确实,但这取决于您对脚本语言的定义。简单的表达语言会是“脚本语言”吗?

    2) 安全(用户上传他们的脚本,然后在服务器上执行)

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

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

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

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

    比较难处理的几个方面是:

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

    (并且您还需要考虑可能会破坏您的系统的其他“活动”;例如,创建巨大的数据结构、在主机 JVM 中锁定对象,或者做一些旨在消耗系统级资源的事情;例如,填满文件系统,或耗尽系统的熵池。)

    4) 语法简单易读

    这是您需要自己判断的事情。 (可读性/简单性无法客观衡量...)

    【讨论】:

    • 我会在我的问题中澄清一下,我理解您的担忧
    猜你喜欢
    • 2015-09-23
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 2018-05-25
    相关资源
    最近更新 更多