第 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 许可时才能使用。有些功能对开源项目是免费的,但如果在你的组织中没有提供某些功能,那么你可能没有获得相应的许可证。 |