3

我正在开发一个分析 JAR 文件的闭源 Java 应用程序。由于 java 可以很容易地反编译,而且混淆确实不是什么大问题,我想提供一个在线服务,它将在我的服务器上执行应用程序并返回它的结果,就像这里的 fernflower:www.reversed-java.com/fernflower /。

问题是,我担心这会导致我的应用程序在服务器上加载任何可能有害的 jars,即使我从未运行过这些 jars。我所做的就是使用URLClassLoaderJarInputStream加载它们。

我可以在我的原始应用程序中加载一个 jar 覆盖类以执行恶意代码或弄乱我的程序吗?

动态加载jar有什么风险?

4

1 回答 1

8

动态加载jar有什么风险?

动态加载本身没有风险。风险实际上是运行不受信任的代码的风险。如果您在没有采取适当预防措施的情况下这样做,您的机器可能会完全受损。

如果你打算做这种事情,至少你应该在沙箱中运行不受信任的代码,以阻止它做任何可能有害的事情。例如,您需要阻止读写本地文件、运行外部进程、使用反射、访问系统属性等。您可能希望停止它创建线程、创建套接字和其他消耗系统资源的事情。

最后,您需要考虑某些不受信任的 JAR 具有无限循环方法的情况。这是使用安全沙箱无法解决的问题。实际上,摆脱循环线程的唯一防弹方法是退出 JVM 并重新启动它。

一个 jar 可以在我的原始应用程序中加载覆盖类以执行恶意代码或弄乱我的程序吗?

我不认为它可以轻易地覆盖你的类,但是还有很多其他方法可以让不受信任的代码“搞乱”你的世界;往上看。(如果不受信任的代码可以执行反射代码,那么它可能会通过弄乱类加载器的私有数据结构来覆盖您的类。)

于 2011-11-29T07:29:18.447 回答