【问题标题】:Security issues of compiling against older JDKs针对旧 JDK 进行编译的安全问题
【发布时间】:2010-10-02 14:55:02
【问题描述】:


针对较旧的 JDK 进行编译是否存在任何已知的安全问题?例如,假设 Oracle 决定在他们的一个实现中改变一些东西,即关闭一个安全漏洞。如果我们针对旧版 JDK 进行编译,我们是否仍然容易受到攻击?

编辑

我们正在针对 JDK 6 运行,并且针对 Java 5 进行编译,这是我试图为任何看到此问题的其他人解决的问题的症结所在。为了完整起见,假设在 ant 构建中,我们的目标是 1.5

编辑 2

此外,应用程序中的调用问题可能具有无法直接访问的私有 API/实现。

【问题讨论】:

    标签: java security


    【解决方案1】:

    除了一些尚未发生的非常假设的利基情况之外,唯一重要的是执行应用程序的版本。

    我认为没有任何已知的安全问题已经用@deprecated “修复”了,因为那真的不合适。

    这里有两个问题: 1) 您可以让 Java 编译器生成与旧版本二进制兼容的二进制文件。这会影响您可以使用的语言功能。

    2) 您可以针对旧版本的 Java 系统库进行编译,这将影响可用的方法/类,因为它们总是添加新的。

    但这些都不会影响您的应用程序的安全性。重要的是执行应用程序的运行时版本。

    请注意,在更新之间修复了安全问题,而不是主要版本,这会导致语言本身发生变化。例如,Java 6 当前处于更新 21。Java 6 更新 19 修复了在 Java 6 更新 18 中易受攻击的问题。

    发布 Java 6 更新 19 时,发布了 Java 1.5 和 Java 1.4 的更新,以修复 Java 1.5(更新 24)和 Java 1.4(更新 26)中的相同问题。在此处查看安全基线表:http://www.oracle.com/technetwork/java/javase/6u19-141078.html

    【讨论】:

    • 这似乎是最完整的答案。谢谢
    【解决方案2】:

    如果您针对 JDK 1.5 进行编译:

    • 使用 JRE 1.5 的用户很容易受到攻击
    • 使用 JRE 1.6 的用户不会受到攻击

    应用程序将使用用户运行时的库运行。由于漏洞已在 Oracle 库中修复,现在您的应用程序正在调用该库,因此安全漏洞将得到缓解。

    但是,由于您针对 1.5 进行编译,因此您的用户将能够使用 1.5。尽你所能避免漏洞;如果无法避免,请在启动时检测 JRE 版本并在适当时发出警报。

    【讨论】:

    • 很高兴知道,如何审核 1.5 JDK 的 HP 版本以确保系统按预期运行并确保不存在 Oracle 支持 Java 关闭的问题在 HP 版本中?
    • 如果您担心某个特定漏洞,请针对它创建一个测试案例。漏洞通知应该说明问题所在,并且在许多情况下会包含一个代码示例来利用它。对在 HP 上运行的程序运行它,看看会发生什么。
    【解决方案3】:

    如果 Oracle 更改 API(不是实现)以提高安全性,他们可能会添加 @Deprecated 注释,但会在一段时间内保持向后兼容性。注释将在较新的编译器中触发警告,但不会在您的编译器中触发,也不会在已编译的程序中触发。 (除非 Oracle 决定抛出异常或记录已弃用方法的消息。)

    【讨论】:

    • 我将改写我的问题以指向实现而不是 API。即使它涉及潜在的私有 API
    【解决方案4】:

    我想说,那些未修复的漏洞仍然存在,您和您的应用仍然处于危险之中。

    这与使用未打补丁的旧操作系统或浏览器运行时的问题相同。

    这是迁移到更新的 JVM 的良好动力。

    【讨论】:

    • 我想我的解释可能有点不清楚,请参阅我的编辑。想到这个问题是因为存在一个使用 hpux 的多平台应用程序,其中该供应商仍然支持 java 1.5
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    • 1970-01-01
    • 2016-01-15
    相关资源
    最近更新 更多