我想创建一个基于Java的网站,该网站将执行来自第三方的完全不受信任的代码。此第三方代码需要能够访问Internet上的网站,但不能尝试对其进行DoS。
我可以选择这种语言,但如果它模糊不清就会影响我正在建设的服务的使用。
任何人都可以提供一些关于我应该调查的开源工具的指示吗?
答案 0 :(得分:1)
你在想Google App Engine之类的东西吗?他们通过提供“沙盒”来为Java做这件事,其中应用程序只能访问Java API的精心限制的子集。您可以查看他们的JRE White List想法。 (他们还提供其他语言。)
Yahoo App Platform和Amazon Web Services提供类似的功能,但不是Java(从您的代码中我认为是您的主要兴趣)。
答案 1 :(得分:1)
使用Java代码执行此操作的关键当然是定义SecurityManager
,然后仔细指定策略。除此之外,您将在Linux系统上托管并使用chroot
jail - 或者更好的是,在虚拟化系统上使用chroot
jail。
根据定义,您不必担心有人使用您的单个服务器发起DDOS攻击!
答案 2 :(得分:1)
首先,您需要为您的应用程序构建一个出色的监狱或沙箱。虚拟化可以提供帮助,但即使在来宾虚拟机中,也有很多操作您不希望不受信任的代码执行。
调查mandatory access control,例如AppArmor,SElinux,TOMOYO或SMACK。其中任何一个都可以将服务器代码锁定为仅允许操作的子集。有些补丁可以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想要授予一个给定的权限来运行不受信任的代码,而不允许它使用该权限做有害的事情......