英雄背景无分隔线
指南

使用存在已知漏洞的组件

大多数应用程序都使用大量第三方组件。这些组件提供从日志记录、模板生成到数据库访问等全方位功能。

这使得软件开发变得更加容易,并节省了大量时间,但这些组件也是由人创建的,其中部分组件不可避免地包含漏洞。也就是说,您可能会在不知不觉中暴露于可能被利用的漏洞之中。

保持组件处于最新状态

通常建议定期将框架、库及其他组件保持在最新状态。可通过以下多种方式实现:

  • 许多源代码控制软件能够分析代码库,并在依赖项中发现漏洞时发出警告。
  • 许多包管理器能够分析应用程序,并识别用户可能存在的脆弱依赖项。
  • 存在众多能够识别脆弱依赖关系的软件组成分析(SCA)解决方案。

技术债务风险缓解

库升级中一个颇为棘手的问题在于可能存在破坏代码兼容性的变更。这类变更通常会得到文档记录,但有时也可能存在未记录的变更——这些变更在代码实际部署到生产环境运行之前不会显现。

当应用程序运行多个落后于最新版本的旧版本时,升级至最新版本可能需要大量工作。若出现时间敏感型漏洞,为避免升级耗时数天的情况,保持第三方组件处于相对较新的状态至关重要。

此外,由于包中可能包含重要信息——这些信息虽不明确但可能改变应用程序的运行方式——因此不建议在未阅读发布说明的情况下贸然升级包。

更新后是否会更不安全?

虽然不常见,但可能出现以下漏洞的情况:

  • 在旧版本中不存在
  • 计划在修复漏洞时引入

在这种情况下,您可能会认为定期更新软件包实际上并不理想。当然,这种想法会导致技术债务的累积,因此应尽可能避免。

由于这种情况相对罕见,通过频繁更新软件包所获得的益处远大于新引入漏洞的可能性。只要定期保持更新,这些漏洞本就容易得到缓解。

此外,我们假设供应商不会在不公开的情况下悄悄修复漏洞。遗憾的是,这种情况仍然非常普遍。

值得关注的示例

以下列举了近期值得关注的几个典型案例。通过查阅相关文献,您将理解为何保持知识库更新至关重要。