第 14 章 保护你的代码

2016年,关于Kik这个名字的争执发生在即时通讯服务Kik([https://www.kik.com/](https://www.kik.com/))与开源贡献者Azer Koçulu之间。Azer Koçulu维护着一个同名的开源项目,这场争执导致了互联网的完全中断。至少每个人那天都注意到出了点问题。发生了什么呢?由于争执和npm站在即时通讯服务Kik的一方,Azer撤回了他在npm注册表中的所有包。其中包括一个名为 left-pad 的包。它的作用是向文本字符串的开头添加字符。left-pad 是一个简单的模块,只有 11 行代码:

module.exports = leftpad;

function leftpad(str, len, ch) {
  str = String(str);
  var i = -1;
  if (!ch && ch !== 0) ch = ' ';
  len = len - str.length;
  while (++i < len) {
    str = ch + str;
  }
  return str;
}

这是一个简单的单一功能函数,每个开发者都应该能够自己写出来。然而,这个包却被包括 React 在内的全球框架所依赖。React 并没有直接依赖这 11 行代码,但它依赖于其他包,而其中一个包又依赖了 left-pad。当这个包丢失时,基本上导致了整个互联网的崩溃(见Keith Collins 2016和Tyler Eon 2016)。

今天的软件依赖于大量不同的软件——工具、包、框架、编译器和语言——每一个都有自己的依赖树。因此,确保不仅是你的代码,甚至是整个软件供应链的安全性和许可证合规性至关重要。

在本章中,你将了解如何通过 GitHub Actions 和 Advanced Security 帮助你消除代码中的漏洞和安全问题,并成功管理你的软件供应链。

本章的关键主题如下:

  • 依赖管理和Dependabot

  • 秘密扫描

  • 代码扫描

  • 编写你自己的CodeQL查询

GitHub Advanced Security

本章讨论的许多功能仅在获得 GitHub Enterprise 的 Advanced Security 许可时才能使用。有些功能对开源项目是免费的,但如果在你的组织中没有提供某些功能,那么你可能没有获得相应的许可证。