
指南
使用存在已知漏洞的组件
大多数应用程序都使用大量第三方组件。这些组件提供从日志记录、模板生成到数据库访问等全方位功能。
这使得软件开发变得更加容易,并节省了大量时间,但这些组件也是由人创建的,其中部分组件不可避免地包含漏洞。也就是说,您可能会在不知不觉中暴露于可能被利用的漏洞之中。
保持组件处于最新状态
通常建议定期将框架、库及其他组件保持在最新状态。可通过以下多种方式实现:
- 许多源代码控制软件能够分析代码库,并在依赖项中发现漏洞时发出警告。
- 许多包管理器能够分析应用程序,并识别用户可能存在的脆弱依赖项。
- 存在众多能够识别脆弱依赖关系的软件组成分析(SCA)解决方案。
技术债务风险缓解
库升级中一个颇为棘手的问题在于可能存在破坏代码兼容性的变更。这类变更通常会得到文档记录,但有时也可能存在未记录的变更——这些变更在代码实际部署到生产环境运行之前不会显现。
当应用程序运行多个落后于最新版本的旧版本时,升级至最新版本可能需要大量工作。若出现时间敏感型漏洞,为避免升级耗时数天的情况,保持第三方组件处于相对较新的状态至关重要。
此外,由于包中可能包含重要信息——这些信息虽不明确但可能改变应用程序的运行方式——因此不建议在未阅读发布说明的情况下贸然升级包。
更新后是否会更不安全?
虽然不常见,但可能出现以下漏洞的情况:
- 在旧版本中不存在
- 计划在修复漏洞时引入
在这种情况下,您可能会认为定期更新软件包实际上并不理想。当然,这种想法会导致技术债务的累积,因此应尽可能避免。
由于这种情况相对罕见,通过频繁更新软件包所获得的益处远大于新引入漏洞的可能性。只要定期保持更新,这些漏洞本就容易得到缓解。
此外,我们假设供应商不会在不公开的情况下悄悄修复漏洞。遗憾的是,这种情况仍然非常普遍。
值得关注的示例
以下列举了近期值得关注的几个典型案例。通过查阅相关文献,您将理解为何保持知识库更新至关重要。