跳至主要内容

寻找并修复您的第一个代码漏洞

通过在演示仓库中解决代码扫描警报,学习保护代码的基础知识。

在学习编程的过程中,意外在项目中引入漏洞是正常的。如果在分享作品之前未解决这些安全问题,攻击者可能会利用它们操纵您的代码并访问敏感数据,因此尽快识别并修补这些漏洞非常重要。

幸好,有代码扫描等工具可以自动发现、解释甚至修复公共仓库中的漏洞。在本教程中,您将学习如何使用代码扫描来确保作品的安全。

设置演示仓库

让我们通过 fork 一个带有安全漏洞的演示项目来开始。本项目构建一个简单的网页,但由于我们不会部署该项目,在本练习中不存在安全风险

  1. 前往 new2code/code-scanning-demo 仓库。
  2. 在页面右上角,单击 派生.
  3. 在出现的页面中,单击创建 fork

在代码中寻找漏洞

现在我们已经设置好项目,让我们为您的 fork 启用代码扫描,以检查代码中的漏洞。

  1. 返回 GitHub,在仓库主页,单击 安全和质量
  2. 在“代码扫描警报”行,单击设置代码扫描
  3. 在“工具”部分,靠近“CodeQL 分析”,选择设置,然后单击默认
  4. 在出现的弹出窗口中,单击启用 CodeQL。这将触发一个 GitHub Actions 工作流,对您的代码进行漏洞扫描。
  5. 要检查工作流的状态,请在导航栏中单击 Actions(工作流).
  6. 工作流完成后,在导航栏中单击 安全和质量
  7. 要查看工作流发现的代码扫描警报,请在侧边导航中单击 代码扫描,然后单击反射型跨站脚本

了解代码扫描警报

既然代码扫描已经识别出代码中的漏洞,让我们拆解警报中提供的信息。

位置

警报显示了文件的一个小预览,聚焦于产生漏洞的代码行。在我们的示例中,漏洞位于 index.js 文件的第 8 行,我们在站点中实现了用户提供的输入。

如果仔细观察,会发现根本问题出现在第 7 行,当我们在未检查恶意代码的情况下将 greet 赋值为用户输入。要查看代码中漏洞的逐步视图,请在易受攻击行下方的提示框中单击显示路径

Screenshot of the location of a code scanning alert. A "Show paths" button is outlined in orange.

描述和建议

在文件预览下方,代码扫描提供了更详细的漏洞描述。要查看推荐的修复方案以及易受攻击和已修复代码的示例,请单击显示更多.

Screenshot of the details of a code scanning alert. A dropdown labeled "Show more" is outlined in orange.

在我们的案例中,建议在使用用户输入之前对其进行净化。这意味着我们需要检查输入中是否包含恶意代码,如有必要则进行清理。

提示

如果您不完全理解推荐的修复方法,可尝试请求 Copilot Chat进行解释。

时间线

最后,您可以在页面底部查看警报的时间线。我们的时间线包含首次检测到漏洞的提交,并在我们修复漏洞后自动更新。

Screenshot of the timeline for a code scanning alert.

自动修复漏洞

为了快速轻松地保护我们的项目,让我们使用 GitHub Copilot 自动修复(Autofix)来进行代码扫描。

  1. 在警报标题下方的框中,系统提示“使用 Copilot Autofix for CodeQL 加速此警报的修复”,单击 生成修复.

  2. Copilot 生成修复建议后,会描述它所建议的更改,渲染更改的预览,并列出任何新增的依赖项。请花点时间阅读 Copilot 的工作内容。

  3. 要使用该修复创建一个拉取请求,请单击提交到新分支,然后单击提交更改

  4. 草稿拉取请求创建后,在页面底部单击准备审查以使其可合并。

  5. 要应用修复,请单击合并拉取请求,然后单击确认合并

    拉取请求合并后,代码扫描工作流再次运行,警报将自动关闭,修复漏洞的提交将被添加到时间线中。

注意

在实际项目中,您应始终在将 Copilot 建议的更改提交到代码之前进行审查。

后续步骤

现在您已经在演示仓库中尝试了代码扫描,请在您自己的项目中启用它,以快速发现并修复当前和未来的漏洞。

现在您已经保护了自己编写的代码,下一步请通过检查依赖项的安全性来进一步提升代码安全性。参见寻找并修复您的第一个依赖漏洞

© . This site is unofficial and not affiliated with GitHub, Inc.