在学习编码的过程中,不小心在项目中引入漏洞是很正常的。 如果在分享工作之前不解决这些安全问题,攻击者就会利用它们操纵代码并访问敏感数据,因此尽快识别并修补非常重要。
值得庆幸的是,有些工具可以在你的公共存储库中自动查找、解释甚至修复漏洞。 本教程中,您将学习如何通过code scanning来确保工作安全。
设置演示仓库
让我们从复刻一个存在安全漏洞的演示项目开始。 此项目生成一个简单的网页,但由于我们不会部署项目,因此本练习不存在安全风险****。
- 导航到
new2code/code-scanning-demo仓库。 - 在页面右上角,单击 “分叉”。
- 在出现的页面中,单击“Create fork”****。
查找代码中的漏洞
设置项目后,让我们启用您的派生版本中的code scanning 来检查代码中的漏洞。
- GitHub返回,在存储库的主页上,单击** Security and quality**。
- 在“Code scanning 警报”行中,单击设置code scanning。
- 在“工具”部分的“CodeQL 分析”旁边,选择“ 设置”,然后单击“ 默认”。
- 在显示的弹出窗口中,单击“ 启用 CodeQL”。 这会触发扫描 GitHub Actions 代码中的漏洞的工作流。
- 若要检查工作流的状态,请在导航栏中单击“ 操作”。
- 工作流完成后,在导航栏中单击 Security and quality。
- code scanning若要查看工作流发现的警报,请在侧导航中单击Code scanning,然后单击 “反射跨站点脚本”。
code scanning了解警报
更何况 code scanning 已识别出了代码中的漏洞,接下来我们分解警报中提供的信息。
位置
警报显示文件的小预览,重点展示造成漏洞的代码行。 在我们的案例中,在 index.js 文件的第 8 行检测到了漏洞,我们在该行实现了网站中用户提供的输入。
如果我们仔细观察,就会发现根本问题出现在第 7 行,即我们在未检查恶意代码的情况下将 greet 分配给用户输入。 若要查看代码中漏洞的分步视图,请在漏洞行下方的弹出窗口中单击“显示路径”****。

描述和建议
在文件预览下方, code scanning 提供漏洞的更详细说明。 若要查看建议的修补程序,以及易受攻击和固定代码的示例,请单击“ 显示更多”。

在我们的案例中,建议是在使用前清理用户输入。 这意味着我们需要检查输入是否有恶意代码,然后在必要时进行清理。
提示
如果你不完全了解建议的修补程序,请尝试 请求 副驾驶聊天 解释它。
时间线
最后,可以在页面底部看到警报的时间线。 时间线包含首次检测到漏洞的提交记录,并在我们修复漏洞时自动更新。

自动修复漏洞
为了快速和轻松地保护我们的项目,让我们使用GitHub Copilot自动修复来处理code scanning。
-
在警报标题下方的框中,建议你“使用Copilot自动修复加快对此CodeQL警报的修正”,请单击生成修复。
-
生成修复建议后 Copilot ,它将描述建议的更改、呈现更改预览以及调用任何添加的依赖项。 花点时间读一读 Copilot 的作品。
-
若要创建包含修复的拉取请求,请单击提交到新分支,然后单击提交更改。
-
创建草稿拉取请求后,在页面底部,单击“提交审核”以使其进入可合并状态****。
-
若要应用修复,请单击“Merge pull request”,然后单击“Confirm merge”********。
合并拉取请求并 code scanning 再次运行工作流后,警报将自动关闭,修复漏洞的提交将添加到时间线。
注意
在实际项目中,您应始终在提交更改到代码之前查看由 Copilot 建议的更改。
后续步骤
在演示存储库上试用 code scanning 后,可在 自己的项目中 快速查找和修复当前和将来的漏洞。
在确保您自己编写的代码安全之后,下一步通过检查依赖项的安全性,进一步提升代码的安全性。 请参阅“查找并修复第一个依赖项漏洞”。