【发布时间】:2013-08-21 17:53:01
【问题描述】:
我的问题的动机很简单:不幸的是,Oracle 停止了 Java 6 的开发,并且不会提供任何额外的构建。 如果 Oracle 发现任何安全问题,他们只会在 Java 7 中修复它。 我们有使用 Java 6 开发的大型项目,但我没有资源将其转换为 Java 7。
所以,我想在 JDK 6 (6u45) 的最新版本中编译代码并在 JDK 7 的最新版本中运行它。
在这种情况下,我的字节码是否会对 JDK 7 中修复的漏洞开放?
添加
Oracle Java SE 重要补丁更新示例: http://www.oracle.com/technetwork/topics/security/javacpuapr2013-1928497.html
很遗憾,下一个安全补丁将不会应用于 JDK 6。
所以,更新后的问题是: 我应该使用最新的 JRE 7 运行我的代码而不重新编译我的 Java 6 字节代码吗? 还是应该使用最新的 JDK 重新编译我的代码并使用最新的 JRE 运行它?
【问题讨论】:
-
除非我们知道漏洞是什么,否则我们无法回答这个问题。
-
很有可能会在 JVM 级别修复,这意味着当您在 JVM7/JDK7 下运行字节码时会修复。但不可能对所有情况都下定论。
-
该漏洞可能存在于 javac、JVM 或 JDK 类中。在某些情况下,它可能涉及使用(易受攻击的)API X 与((可能)无懈可击的)API Y,除非您更改源代码,否则您仍然容易受到攻击,或者根本无法运行。
-
我没有看到任何新闻说“重新编译你的代码”——只是“将你的 JRE 更新到 X,因为版本 Y 是易受攻击的”。
-
@HotLicks 如果它在 JDK 类中,则不需要重新编译,因为 JVM 安装提供了这些。而且如果是在第三方库中,则不适用于这个问题,具体是关于Oracle 发现Java 中的问题。 javac 中的安全漏洞当然是可能的,但我不记得听说过。