0deps 运动:本地依赖与安全

软件开发人员在几乎每个项目中都会安装数百个外部库。现代框架通常依赖于数千个隐藏的依赖项。这为软件供应链带来了巨大的风险。

0deps 运动提出了一个简单的问题: 如果你的应用程序只运行你控制的代码会怎样?

每个依赖项都会增加你的攻击面。依赖项可能会:

  • 引入安全漏洞。
  • 成为攻击目标。
  • 停止接收更新。
  • 修改代码并导致你的应用崩溃。
  • 添加新的隐藏依赖项。

在 0deps 模型中,你将每个依赖项直接放入你的项目仓库中。你不会在构建期间下载它们。从一开始,所有内容都保留在你的仓库内部。

这种方法提供了:

  • 可复现的构建。
  • 减少对外部注册表的依赖。
  • 更容易进行安全审计。
  • 更具可预测性的代码。

其核心思想并不是阻止代码发生变化。算法和安全补丁必须变化。保持不变的是公共契约(public contract)。

一个库展示了一组特定的函数。这些函数构成了一个契约。

  • authenticate()
  • createSession()
  • verifyPasskey()

库内部的实现可以完全改变。你可以更换算法或数据结构。你应用程序的其他部分并不会受到影响,因为接口保持不变。

当安全漏洞出现时,你会面临两个问题:

  1. 修复漏洞。
  2. 确保更新不会破坏你的应用。

0deps 架构解决了第二个问题。你更新接口背后的代码。公共 API 保持不变。你的应用程序无需任何更改即可继续运行。

你通过内部适配器将外部工具隔离起来: 应用程序 ↓ 公共接口 ↓ 适配器 ↓ 实现

如果一个库停止维护,你只需要更改适配器。你应用的其余部分依然安全。库的版本变成了一个微小的细节,而不是一个重大的难题。

目标不是让软件变得完美。目标是降低供应链风险。通过消除动态安装,你可以阻止:

  • 恶意软件包发布。
  • 被攻破的注册表。
  • 依赖混淆攻击。

每一行代码都成为了你项目的一部分。这实现了完全的控制和审查。

项目持续数年。库和框架会消失。有了 0deps,即使生态系统发生变化,你的应用程序仍能继续使用相同的契约。

来源:https://dev.to/fullagenticstack/0deps-movement-local-dependencies-immutable-contracts-and-security-by-design-8gi