在学习编码的过程中,不小心在项目中引入漏洞是很正常的。 如果在分享工作之前不解决这些安全问题,攻击者就会利用它们操纵代码并访问敏感数据,因此尽快识别并修补非常重要。
值得庆幸的是,有一些工具可以自动查找、解释甚至修复公共仓库中的漏洞,例如 code scanning。 本教程介绍如何使用 code scanning 来确保工作安全。
让我们从复刻一个存在安全漏洞的演示项目开始。 此项目生成一个简单的网页,但由于我们不会部署项目,因此本练习不存在安全风险****。
- 导航到
new2code/code-scanning-demo
仓库。 - 在页面右上角,单击 “Fork”****。
- 在出现的页面中,单击“Create fork”****。
现在我们已经设置好了项目,让我们来为分支启用 code scanning,以检查代码中的漏洞。
- 返回 ,在仓库的主页上,单击 “Security”****。
- 在“Code scanning alerts”行中,单击“Set up code scanning”****。
- 在“Tools”部分的“CodeQL analysis”旁边,选择“Set up”,然后单击“Default”********。
- 在出现的弹出窗口中,单击“Enable CodeQL”****。 这将触发 Actions 工作流来扫描代码是否存在漏洞。
- 若要检查工作流的状态,请在导航栏中单击 “Actions”****。
- 工作流完成后,在导航栏中,单击 “Security”****。
- 若要查看工作流发现的 code scanning 警报,请在侧导航中单击 Code scanning,然后单击“Reflected cross-site scripting”********。
现在 code scanning 已经识别出了代码中的漏洞,让我们来分析一下警报中提供的信息。
警报显示一个小的文件预览,以产生漏洞的代码行为中心。 在我们的案例中,在 index.js
文件的第 8 行检测到了漏洞,我们在该行实现了网站中用户提供的输入。
如果我们仔细观察,就会发现根本问题出现在第 7 行,即我们在未检查恶意代码的情况下将 greet
分配给用户输入。 若要查看代码中漏洞的分步视图,请在漏洞行下方的标注中单击“Show paths”****。
在文件预览下方,code scanning 提供了漏洞的更详细描述。 若要查看建议的修复,以及易受攻击和已修复代码的示例,请单击“Show more”****。
在我们的案例中,建议是在使用前清理用户输入。 这意味着我们需要检查输入是否有恶意代码,然后在必要时进行清理。
提示
如果不完全理解建议的修复,请尝试要求 Copilot Chat 进行解释。
最后,可以在页面底部看到警报的时间线。 时间线包含首次检测到漏洞的提交,并在修复漏洞时自动更新。
为了方便快捷地保护项目,让我们使用 Copilot Autofix 来 code scanning。
在警报标题下方,在建议“Speed up the remediation of this alert using Copilot Autofix for CodeQL”的框中,单击 “Generate fix”****。
在 Copilot 生成修复建议后,其会描述所建议的更改,呈现更改预览,并标注任何添加的依赖项。 请花点时间通读 Copilot 的工作。
若要创建包含修复的拉取请求,请单击“Commit to new branch”,然后单击“Commit change”********。
创建草稿拉取请求后,在页面底部,单击“Ready for review”使其变为可合并状态****。
若要应用修复,请单击“Merge pull request”,然后单击“Confirm merge”********。
合并拉取请求并再次运行 code scanning 工作流后,警报将自动关闭,修复漏洞的提交将添加到时间线。
注意
在实际项目中,在将更改提交到代码之前,应始终审查 Copilot 建议的更改。
现在你已经在演示仓库中试用了 code scanning,请在自己的项目中启用,以快速查找并修复当前和未来的漏洞****。