В модели безопасности Java можно заблокировать самые опасные действия от ненадежных классов, но в последний раз, когда я проверял (несколько лет назад), все еще было возможно, чтобы ненадежный код выполнял атаку типа «отказ в обслуживании», постоянно выделяя памяти, пока JVM не выйдет из строя с OutOfMemoryException. Сейчас я не вижу улучшения ситуации.
У меня есть требование запускать недоверенный код от сторонних разработчиков внутри Java-приложения, и я хотел бы знать, возможно ли каким-либо образом ограничить пространство кучи / стека, которое класс или поток может выделить в модели безопасности Java. Таким образом предотвращая DoS-атаки на основе выделения памяти. Я знаю о -Xss, но, насколько я понимаю, это ограничивает все потоки, большинство из которых не нуждается в ограничении.
Я также рассмотрел вопрос создания контейнера для ненадежного кода, который будет запускаться в собственной JVM и взаимодействовать с основным приложением через сокеты, или проводить статический анализ ненадежного кода. Тем не менее, они оба звучат как больше усилий, чем я надеялся, хотя, если кто-то знает об этом трюке или библиотеке с открытым исходным кодом, я заинтересован.
Итак, есть ли способ ограничить объем памяти, который поток может выделить себе, или какой-либо другой способ предотвратить атаки памяти на отказ в обслуживании в Java?