如何代表第三方运行不受信任的代码?

时间:2011-06-03 02:04:18

标签: java

我想创建一个基于Java的网站,该网站将执行来自第三方的完全不受信任的代码。此第三方代码需要能够访问Internet上的网站,但不能尝试对其进行DoS。

我可以选择这种语言,但如果它模糊不清就会影响我正在建设的服务的使用。

任何人都可以提供一些关于我应该调查的开源工具的指示吗?

5 个答案:

答案 0 :(得分:1)

你在想Google App Engine之类的东西吗?他们通过提供“沙盒”来为Java做这件事,其中应用程序只能访问Java API的精心限制的子集。您可以查看他们的JRE White List想法。 (他们还提供其他语言。)

Yahoo App PlatformAmazon Web Services提供类似的功能,但不是Java(从您的代码中我认为是您的主要兴趣)。

答案 1 :(得分:1)

使用Java代码执行此操作的关键当然是定义SecurityManager,然后仔细指定策略。除此之外,您将在Linux系统上托管并使用chroot jail - 或者更好的是,在虚拟化系统上使用chroot jail。

根据定义,您不必担心有人使用您的单个服务器发起DDOS攻击!

答案 2 :(得分:1)

首先,您需要为您的应用程序构建一个出色的监狱或沙箱。虚拟化可以提供帮助,但即使在来宾虚拟机中,也有很多操作您不希望不受信任的代码执行。

调查mandatory access control,例如AppArmorSElinuxTOMOYOSMACK。其中任何一个都可以将服务器代码锁定为仅允许操作的子集。有些补丁可以lock your application to a subset of system calls,也可能值得研究。 (因为我已经在AppArmor上工作了近十年,它是我最了解的工具。它也是我认为最适合这项任务的工具,但是SMACK的简洁性非常吸引人。)

您可以执行rate limiting at the firewall level以尝试限制代码托管可能导致的外部烦恼。速率限制与预防:)不同,但它让您有机会看到明显尝试在日志中执行愚蠢的事情。

答案 3 :(得分:0)

我不确定我是否理解你的问题。但根据我的理解,你只需要用户能够执行代码(在基于java的网站中,但代码不需要是java),在这种情况下你考虑让用户只执行客户端 - 代码(即javascript)?这样他们唯一可以伤害的机器就是他们自己的机器。您可以阅读有关其他网站如何处理恶意代码here的更多信息,您可以阅读让用户执行JS here的几个危险。

答案 4 :(得分:0)

等一下。

@sanity没有理由寻找第三方解决方案,因为Java已经具有策略机制,该机制允许不受信任的代码仅访问Java API的给定子集。请参阅包java.security和SecurityManager。它允许你说JVM,“这个应用程序必须有权访问这些东西但不能访问其他东西”。

但是我认为@sanity想要授予一个给定的权限来运行不受信任的代码,而不允许它使用该权限做有害的事情......