Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在运行的JVM中非常有限的部分执行Java字节码_Java_Jvm_Bytecode - Fatal编程技术网

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

在运行的JVM中非常有限的部分执行Java字节码,java,jvm,bytecode,Java,Jvm,Bytecode,有没有办法将一些java字节码运行到运行中的JVM的特殊限制部分?我正在考虑访问非常小的ram,可能只有几十KB,除了ram之外,不需要访问外部世界 我们的目标是在这个安全的环境中执行一些用户提供的字节码,这样主机就不会崩溃,也不会因为执行流氓字节码而泄露信息。您可以在安全沙箱中运行不受信任的字节码,并设置沙箱,这样就不可能与外部世界通信。这就是驻留在浏览器中的JVM在运行不受信任的小程序时所做的。。。除了你需要更严格的沙箱限制。小程序沙盒不会阻止所有网络连接 参考: 然而,不可能完全控制流氓代

有没有办法将一些java字节码运行到运行中的JVM的特殊限制部分?我正在考虑访问非常小的ram,可能只有几十KB,除了ram之外,不需要访问外部世界


我们的目标是在这个安全的环境中执行一些用户提供的字节码,这样主机就不会崩溃,也不会因为执行流氓字节码而泄露信息。

您可以在安全沙箱中运行不受信任的字节码,并设置沙箱,这样就不可能与外部世界通信。这就是驻留在浏览器中的JVM在运行不受信任的小程序时所做的。。。除了你需要更严格的沙箱限制。小程序沙盒不会阻止所有网络连接

参考:

然而,不可能完全控制流氓代码的行为。例如,如果它决定进入一个无限循环或分配一个巨大的数据结构,那么JVM的受信任部分就没有防炸弹的方法来阻止它。如果JVM、类库或沙盒中存在安全缺陷,那么流氓代码就有可能利用它进行攻击


请注意,所有这些都不涉及将代码限制在RAM的特定区域。在Java中无法做到这一点。

您可以在安全沙箱中运行不受信任的字节码,并设置沙箱,以便不可能与外部世界通信。这就是驻留在浏览器中的JVM在运行不受信任的小程序时所做的。。。除了你需要更严格的沙箱限制。小程序沙盒不会阻止所有网络连接

参考:

然而,不可能完全控制流氓代码的行为。例如,如果它决定进入一个无限循环或分配一个巨大的数据结构,那么JVM的受信任部分就没有防炸弹的方法来阻止它。如果JVM、类库或沙盒中存在安全缺陷,那么流氓代码就有可能利用它进行攻击

请注意,所有这些都不涉及将代码限制在RAM的特定区域。您不能在Java中执行此操作。

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

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

你可以用它来做这种运动。JPF是一个模型检查工具,它接受源代码/字节代码并在自己的虚拟机中执行,您可以定义各种属性无死锁、无限循环等来检查


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

1-为了避免无限循环,是否可以在单独的线程中运行不受信任的字节码,并给予超时以完成其执行?2-假设我愿意在执行字节码之前对其进行过滤,那么,有没有一种防炸弹的方法来避免分配庞大的数据结构?@gsimard-1没有。。。因为如果超时过期,没有防炸弹的方法杀死线程。2.我想不出一个切实可行的方法。你能吗?1我明白了,Thread.stop被弃用了。2过滤指令anewarray、multianewarray、new和newarray如何?当然,这意味着在具有预先分配的输入/输出变量等的环境中设置字节码。或者这又是一个坏主意吗?1它被弃用,因为它是不安全的,而且流氓代码很有可能利用它损害JVM的其余部分。2只处理流氓直接执行的数组分配。如果对标准库代码应用相同的筛选器,则可能会破坏受信任的代码。您可以创建一个巨大的数据结构,而无需使用数组…1-为了避免无限循环,不受信任的字节码是否可以在单独的线程中运行,并给予超时以完成其执行?2-假设我愿意在执行字节码之前对其进行过滤,那么,有没有一种防炸弹的方法来避免分配庞大的数据结构?@gsimard-1没有。。。因为如果超时过期,没有防炸弹的方法杀死线程。2.我想不出一个切实可行的方法。你能吗?1我明白了,Thread.stop被弃用了。2过滤指令anewarray、multianewarray、new和newarray如何?当然,这意味着在具有预先分配的输入/输出变量等的环境中设置字节码。或者这又是一个坏主意吗?1它被弃用,因为它不安全,而且流氓代码很有可能利用它 这会损害JVM的其他部分。2只处理流氓直接执行的数组分配。如果对标准库代码应用相同的筛选器,则可能会破坏受信任的代码。您可以创建一个巨大的数据结构,而无需使用阵列。。。