作者:Kedasha Kerr
排版:Alan Wang
学习如何使用 GitHub Advanced Security 保护你的项目,并确保它们的安全性。
欢迎回到《GitHub 初学者指南》第三季!
到目前为止,今年我们已经介绍了 GitHub Issues 和 Projects,以及 GitHub Actions。这一次,我们将稍微讨论一下安全性,以及 GitHub 提供了哪些工具来帮助你确保代码的安全。在本文结束时,你将了解如何使用内置工具(例如密钥扫描、Dependabot、代码扫描和 Copilot Autofix)来修复你仓库中的漏洞。
为什么安全性很重要
漏洞是你代码或所使用库中的弱点,攻击者可以利用这些弱点。需要意识到,一旦你将某个库导入到项目中,你就继承了该库的所有风险,即使这些存在漏洞的代码并不是你自己编写的。这就是为什么即使是很小或全新的项目也可能存在漏洞------几乎所有软件都依赖第三方包。
GitHub 通过 GitHub Advanced Security(GHAS)让发现和修复这些问题变得前所未有的简单,这是一个帮助你提升并维护代码质量的产品套件。在公共仓库中,你可以使用 Dependabot、代码扫描、密钥扫描和 Copilot Autofix。如果你想了解更多不同功能,可以查看我们关于 GHAS 的文档。或者继续阅读,我们将带你逐步了解如何启用和使用其中的一些功能。
启用安全功能
第一步是确保 GHAS 已开启。
-
进入你的仓库。
-
点击页面顶部的 Settings 页签。
-
在左侧栏中 "Security" 下选择 Advanced Security。
-
在 "Dependabot" 下,启用 "Dependabot alerts" 和 "Dependabot security updates"。
-
向下滚动到 "Code scanning" 部分。
-
对于 "CodeQL analysis",选择 Set up ,然后在上下文菜单中选择 Default。
-
会出现一个新窗口。选择 Enable CodeQL,无需更改任何设置。
-
向下滚动到 "Secret Protection" 并启用它。
这些工具默认在公共仓库中可用。如果你有私有仓库,则需要 GHAS 许可证。在窗口顶部选择 Security 页签,进入该仓库的安全主页。在这里,你将看到你已启用的各种 GHAS 工具选项。你可以在这里查看暴露的密钥、存在漏洞的依赖项以及存在风险的代码路径的警报。现在让我们更详细地看看这些工具。如果你想查看各种警报的显示方式,请记住我们还提供了本文的在线视频版本。
使用密钥扫描
GitHub 可以通过密钥扫描帮助你保护敏感信息。如果你不小心提交了 API key 或 token,密钥扫描会在左侧栏的 Security 标签下的 Secret scanning 中标记出来。当你看到警报时,点击具体警报的标题,可以查看检测到的密钥以及它出现的位置。
解决该暴露密钥的一种方法是将其撤销。撤销密钥意味着禁用旧的密钥,使其无法再被使用。通常你需要在该密钥所属的平台上生成一个新密钥,例如 Azure 或 Stripe。
GitHub 无法自动为你撤销密钥。这一步需要你自己完成。不过,密钥扫描会提供早期预警,避免泄露的密钥被真正利用。
在你撤销密钥后,可以通过以下步骤关闭该密钥扫描警报:
-
在窗口右上角选择 Close as。
-
在上下文菜单中选择 Revoked。
-
点击上下文菜单底部绿色的 Close alert 按钮。
什么是 Dependabot?
Dependabot 是一个代码扫描工具,帮助你保持依赖项为最新状态。还记得我们之前提到的,你会继承项目中引入的每个库的漏洞吗?Dependabot 通过在发现项目依赖库存在漏洞时发出警报来帮助解决这个问题。
要查看 Dependabot 警报,请返回到仓库中的 Security 页签。当你点击某个 Dependabot 警报时,它会带你进入对应的 pull request,以便你更新你的库。在 pull request 页面中,如果向下滚动,你可以通过选择 GitHub Advisory Database 中的 See advisory 查看触发警报的具体安全公告。
在 pull request 页面顶部,点击绿色的 Review security update 按钮来审查版本更新。在合并建议更改之前,你应该始终进行审查。如果一切看起来都没问题,就可以继续合并该 pull request。
Dependabot 会自动将 GitHub 安全公告转化为 pull request,这样你就不需要手动跟踪常见漏洞与暴露。
准备好进阶了吗?
前往 GitHub Skills,尝试一些挑战,了解更多关于 GitHub Advanced Security 的内容并提升你的技能。这些挑战是一种有趣且互动的学习安全知识的方式!
你还可以查看 vulnerable-node 仓库,以获得更多使用这些工具的实践经验。
响应 CodeQL 警报
CodeQL 是用于扫描代码并生成代码扫描警报的引擎(你可以在 Security 页签下找到这些警报)。CodeQL 并非代码扫描工具。它更强大,因为它能够理解数据流,展示输入从哪里开始以及最终流向哪里。
因此,代码扫描警报可以覆盖广泛的潜在场景。当你选择一个代码扫描警报时,它会解释问题,并在可能的情况下提供额外信息,例如修复建议以及示例,用来说明问题和可能的解决方案。
当你理解了警报之后,可以通过以下步骤使用 Copilot Autofix 来解决问题:
-
在警报顶部选择 Generate fix 按钮。
-
Copilot 会建议一个补丁。审查更改并确认它满足你的需求。
-
点击底部绿色的 Commit to new branch 按钮。
-
在新的弹出窗口中,选择 Open a pull request 选项,然后点击 Commit change。
-
像处理任何其他 pull request 一样处理这个自动生成的 pull request:进行审查并合并更改。请记住,虽然 Copilot 可以加速安全修复,但整个过程始终由你掌控。
接下来
恭喜!你现在已经学会如何使用 GitHub Advanced Security 来自信地检测并修复代码中的漏洞。公共仓库可以免费使用这些 GHAS 工具,因此你可以从一开始就保护你的项目安全。你可以随时通过 GitHub Skills 或 'vulnerable-node' 仓库来测试你的技能。
如果你想获取更多信息,我们还提供了大量文档。以下是一些可以帮助你入门的链接:
编码愉快!