我可以选择语言,但如果语言过于冷门,它会损害我正在构建的服务的采用率。
有人可以提供一些指向应该调查的开源工具吗?
你是否考虑过类似于Google App Engine的东西?他们通过提供一个“沙盒”来为Java应用程序提供访问仅限于Java API的精心限制的子集。你可以查看他们的JRE白名单以获取灵感。(他们还提供其他语言。)
Yahoo App Platform和Amazon Web Services提供类似的功能,但不是针对Java(从您的标签中可以看出,这是您的主要兴趣)。
首先,您需要为应用程序构建一个优秀的监狱或沙盒。虚拟化可以帮助,但即使在客户机中,也有很多操作是您不希望您不信任的代码执行的。
因此,请调查强制访问控制,例如AppArmor、SElinux、TOMOYO或SMACK。其中任何一种都可以将您的服务器代码锁定为仅允许一部分操作。还有可用的补丁可以将您的应用程序锁定为一组系统调用的子集,这可能值得进一步研究。(由于我已经在AppArmor上工作了近十年,这是我最了解的工具。它也是我认为最适合这项任务的工具,但SMACK的极简主义确实很吸引人。)
你可以在防火墙级别上执行速率限制,以尝试限制代码托管可能引起的外部干扰量。速率限制并不意味着完全阻止,但它能让你有机会在日志中看到明显的恶意行为。
等一下,大家。
@sanity 没有必要寻找第三方解决方案,因为 Java 已经有一个策略机制,允许不受信任的代码仅访问给定子集的 Java API。请参阅 java.security 包和 SecurityManager。它允许您告诉 JVM,“这个应用程序必须具有访问此内容但不能访问此其他内容的权限”。
但我认为 @sanity 想要授予特定权限以运行不受信任的代码,而不允许其使用该权限进行有害操作...