我有一个用Java5编译的旧web应用程序,由于各种原因,它不容易升级到较新版本的Java,目前运行在Java5下。
我的问题是,用新版本的Java运行旧的web应用程序(不用新的Java版本重新编译应用程序,并假设这不会导致运行时错误)是否会以任何显着的方式减轻旧Java运行时环境的安全风险?
(我指的是与旧的Java运行时环境相关的安全风险,我知道使用较新的Java版本并不能减少与XSS等相关的安全风险)。
发布于 2019-02-13 22:12:14
通常,最好让您的Java运行时保持最新。当然,升级是否减轻了任何安全风险取决于应用程序。A "Hello World!“应用程序可能不会受到影响,因为它没有安全要求,没有攻击向量,也不会使用太多的运行时组件(攻击面)。
但是,web应用程序通常在应用程序服务器上运行,该应用程序服务器很可能使用Java来实现其TLS。这意味着您的TLS实现很可能已经多年没有升级过了。虽然与C相比,Java有一些优势来挫败一些攻击,但其他漏洞肯定会存在。例如,Heartbleed不太可能成为问题,因为它依赖于缓冲区溢出,而Java具有防止缓冲区溢出的内部保护。PKCS#1 v1.5填充oracles可能适用,因为它取决于实际的实现。
由于Java可执行文件本身并不是特别容易被利用的bug,它主要取决于您的服务器、库和应用程序的运行时类中使用了什么功能(按照这个顺序,服务器更有可能占用很大的空间)。升级您的Java版本和服务器+库。根据功能的不同,一些实用程序库的优先级可能较低,但请保持警惕。如果Apache Commons Codec突然出现问题,您不希望出现漏洞。
更重要的是:为您的系统创建一个更新和升级策略,并遵守它。测试量取决于您是否必须更新或升级系统;如果实现得很好,您可以对更新进行自动化测试,并对升级进行一轮完整的测试。希望这些库使用语义版本控制,以便将升级与更新区分开来。
如果在较新的版本上运行它不会导致运行时错误,这取决于应用程序;如果它是在构建时考虑到Java可移植性的,那么很可能不会。然而,滥用Java语言的程度可能会导致它失败。例如,我见过一个应用程序从一个运行时崩溃到另一个运行时,它错误地实现了equals,而该元素保留在列表中。
对于这样一个老旧的应用程序,我认为现在是时候进行一轮完整的测试,可能还需要进行代码审查,以评估兼容性问题是否是一个主题。我已经让Java1.2应用程序顺利地运行了,但如前所述,这取决于应用程序是如何编程的。出于兼容性和性能问题,我肯定会(在可能的情况下)将类重新编译为最新版本。
在转到Java 11之前,您可能首先希望迁移到Java 8(这两个版本都是长期支持版本)。Java 8已经结束了,但是您可能需要加倍努力,因为您已经落后太多了。可能Java 8版本只是为了进行简短的功能测试。
您可能已经需要许可才能安装Java,但我要确保您也涵盖了商业方面的内容。对于Java 8和11,应该有一些值得细读的选项。
请注意,Java 10以后的版本只有64位。我已经看到其他供应商的32位版本的Java10,但我不会升级到那些版本,因为你会把自己置于另一个角落。
https://stackoverflow.com/questions/54670323
复制相似问题