在 Java 安全模型下,可以阻止不受信任的类进行最危险的操作,但我上次检查时(现在是几年前),不受信任的代码仍然有可能通过不断分配资源来执行拒绝服务攻击内存,直到 JVM 因 OutOfMemoryException 而崩溃。现在看来,我看不到情况有任何改善。
我需要在 Java 应用程序中运行来自第三方的不受信任的代码,我想知道是否有可能以某种方式限制类或线程可以在 Java 安全模型中分配的堆/堆栈空间。从而防止基于内存分配的 DoS 攻击。我知道 -Xss,但据我了解,它限制了所有线程,其中大部分不需要限制。
我还考虑过为不受信任的代码创建一个容器,该容器将在自己的 JVM 中运行并通过套接字与主应用程序通信,或者对不受信任的代码进行一些静态分析。然而,这些听起来都比我希望的要付出更多的努力,尽管如果有人知道这方面的技巧或开源库我很感兴趣。
那么,有没有一种方法可以限制线程可以分配给自己的内存量,或者有其他方法可以防止 Java 中的内存分配拒绝服务攻击?
最佳答案
目前无法使用 Java 中的标准 API 执行此操作。
越来越多的人对此感兴趣,并且正在为此开发一个名为 Resource Consumption Management API 的 JSR。这可能需要调查。
关于java - Java Sandbox 安全中的内存分配过多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/540738/