在Java安全模型下,可以阻止来自不受信任的类的大多数危险操作,但是上次我检查(几年前),不受信任的代码仍然可以通过不断分配来执行拒绝服务攻击内存直到JVM崩溃并出现OutOfMemoryException。现在看,我看不出情况有任何改善。
我需要从Java应用程序中的第三方运行不受信任的代码,并且我想知道是否有可能以某种方式限制类或线程可以在Java安全模型中分配的堆/堆栈空间。从而防止基于DoS攻击的内存分配。我知道-Xss,但据我所知,它限制了所有线程,其中大部分都不需要限制。
我还考虑为不受信任的代码创建一个容器,该容器将在自己的JVM中运行,并通过套接字与主应用程序通信,或者对不受信任的代码进行一些静态分析。然而,这些听起来比我希望的更多努力,尽管如果有人知道我对此感兴趣的技巧或开源库。
那么,有没有办法限制内存量而不是线程可以分配给自己或者其他一些防止内存分配拒绝服务攻击的方式?
答案 0 :(得分:2)
目前无法使用Java中的标准API执行此操作。
更多的人对此感兴趣,并且正在进行一个名为Resource Consumption Management API的JSR,这可能是值得研究的。
答案 1 :(得分:1)
您需要在单独的进程中运行不受信任的代码。可能仍有办法使用DoS,例如在旧版本的Windows上,您可以轻松地使用所有GDI资源(最近没有尝试,现在我们没有Swing)。