在我们的应用程序中,应用程序使用自定义类加载器加载用户模块。保护用户模块的狂野行为的最佳方法是什么?我们要防止:
修改任何应用程序代码的用户代码。我们有一些单例,用户可以使用例如访问它。反射以获取一些实例并进行更改,例如一些关键配置;或更换一些 guard 代码。由于类加载器是我编写的,所以我可以防止加载任何关键类。
用户代码应该只能访问一些文件夹;如果可能的话。所以它表现得像 unix 用户:)
最佳答案
第一步是设置一个SecurityManager
。这是因为 Java 类库包含全局状态。您还需要确保您的代码不会使用其特权通过此状态暴露自己。此外,一些全局状态未经过安全检查,例如通过“AppContext
”和当前线程。
通常 package.access
安全属性用于隐藏父类加载器上下文中的内部代码。如果潜在的恶意代码是通过非子类加载器加载的,这不是一个坏主意。
请注意,如果您传递隐藏代码的实例,恶意代码可以使用 Object.getClass
、Class.getMethods
等来探索公共(public)接口(interface)。 Class.getClassLoader
被检查,但要确保没有其他导出,例如通过线程上下文类加载器(虽然 Thread.getContextClassLoader
奇怪地有一个安全检查,它的用途是发布类加载器)。
关于java - 如何从用户代码中保护应用程序 Java 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28992910/