Я пытаюсь понять модель безопасности, используемую, когда JVM просят загрузить классы.
Из спецификации JVM для песочницы я уверен, что стандартная реализация JVM должна поддерживать как минимум еще одну ClassLoader
, независимую от primordial ClassLoader
. Это используется для загрузки файлов классов приложения (например, из предоставленного пути к классам).
Если класс запрашивается из ClassLoader
, который не находится в его пространстве имен, например java/lang/String
, то он перенаправляет запрос в изначальный ClassLoader
, который пытается загрузить класс из API Java, если его нет, тогда он бросает NoClassDefFoundError
.
Прав ли я, полагая, что изначальный ClassLoader
загружает только классы из пространства имен Java API, а все другие классы загружаются через отдельную реализацию ClassLoader
?
И это делает загрузку классов более безопасной, потому что это означает, что вредоносный класс не может маскироваться как член Java API (скажем, java/lang/Virus
), потому что это защищенное пространство имен и не может использоваться в текущем ClassLoader
Но есть ли что-то, чтобы предотвратить замену Классов Java API на вредоносные классы, или это будет обнаружено во время class
проверки?