在正在运行的JVM的非常有限的部分中执行Java字节码

时间:2013-01-07 01:49:24

标签: java jvm bytecode

有没有办法将一些java字节码运行到正在运行的JVM的特殊限制部分?我正在考虑访问非常少的ram(可能是几十千字节),并且无法访问任何外部世界(除了那个ram)。

目标是将一些用户提供的字节码执行到这个安全的环境中,使主机不会崩溃或泄漏执行流氓字节码的信息。

2 个答案:

答案 0 :(得分:4)

您可以在安全沙箱中运行不受信任的字节码,并设置沙箱,以便不可能与外界通信。这是浏览器驻留的JVM在运行不受信任的applet时所执行的操作...除了您需要沙箱限制更严格。 (applet沙箱不会阻止所有网络连接。)

参考:How do I create a Java sandbox?

然而,完全控制流氓代码的作用是不可能的。例如,如果它决定进入无限循环或分配一个庞大的数据结构,那么JVM的可信部分就没有防弹方法来阻止它。如果JVM,类库或沙箱中存在安全漏洞,则流氓代码可能会利用它。


请注意,这些都不涉及将代码限制在特定的RAM区域。你不能用Java做到这一点。

答案 1 :(得分:1)

您可以使用JavaPathfinder (JPF)进行此类练习。 JPF是一个模型检查工具,它接受源代码/字节代码并在自己的虚拟机中执行它,您可以定义要检查的各种属性(无死锁,无限循环等)。

JPF作为一个独立的工具运行,因此很难将其集成到您的应用程序中,但也许您可以在外部调用它,然后只查询结果。