欢迎使用代码扫描Java教程!本教程将带您了解如何设置GitHub高级安全性:代码扫描以及可以找到的结果。以下存储库包含用于演示目的的SQL注入漏洞。
代码扫描是您用于在GitHub存储库中分析代码以查找安全漏洞和编码错误的功能。分析确定的任何问题在GitHub中显示。
您可以使用CodeQl(语义代码分析引擎)使用代码扫描。 CodeQl将代码视为数据,使您可以比传统的静态分析仪更有信心找到代码中的潜在漏洞。
本教程使用使用CodeQL分析和代码扫描,以搜索代码中的漏洞。
首先从叉(公共)创建新的存储库或克隆存储库。

在哪里创建分叉存储库,请确保
单击Security选项卡。

单击Set up code scanning 。

通过CodeQL分析单击Setup this workflow按钮。

这将创建一个已经设置的codeql的github操作工作流。由于Java是一种编译语言,您需要在以后的步骤中设置构建。如果您想使用第三方CI系统配置CodeQL分析,而不是使用GitHub操作,请参见文档。
操作工作流文件包含许多不同的部分,包括:

单击Start Commit - > Commit this file以将更改提交主分支。
有许多事件可以触发github操作工作流程。在此示例中,工作流将在

设置新的CodeQL工作流并将其投入到上述步骤中的主分支将触发扫描。
单击Actions选项卡 - > CodeQL
单击特定的工作流程。您可以查看工作流程的进度,直到分析完成为止。

工作流完成后,单击Security选项卡 - > Code Scanning Alerts 。应当可见一个安全警报“由用户控制源构建的查询”。
单击安全警报将提供有关安全警报的详细信息,包括:

单击Show more以查看警报的完整降低,包括示例和链接到其他信息。


CodeQL Analysis能够从源到接收到的数据流路径,使您能够查看警报中的路径遍历。
单击show paths ,以查看导致此警报的数据流路径。


为了修复此特定警报,我们将需要确保对SQL查询中使用的参数进行验证和消毒。
单击Code选项卡,然后在Controllers文件夹中编辑文件IndexController.java ,将内容替换为文件fixme 。

单击Create a new branch for this commit and start a pull request ,命名分支fix-sql-injection ,然后创建拉动请求。
在“拉”请求中,您会注意到CodeQL分析已作为状态检查开始。等到完成。

工作流完成后,通过Code Scanning Results / CodeQL状态检查单击Details 。

请注意,代码扫描已检测到,此拉的请求将修复以前检测到的SQL注入漏洞。

合并拉的请求。合并了拉动请求后,另一个工作流将启动以扫描存储库中的任何漏洞。
最终工作流程完成后,导航返回Security选项卡,然后单击Closed 。请注意,从用户控制的源构建的查询安全警报现在显示为封闭的问题。

单击安全警报,并注意进行修复时详细介绍,由谁以及特定的提交。这提供了完整的可追溯性,以详细说明何时以及如何修复安全警报,以及对问题进行修复的更改。

现在,我们已经进行了设置CodeQL分析并修复了安全警报,我们可以尝试将警报引入拉动请求中。
用基本分支作为main分支创建一个新的拉请请求,并将分支作为new-feature分支进行比较。

确保将基本分支设置为您自己的存储库main分支与原始存储库的main分支。
创建拉动请求后,您会注意到CodeQL分析已作为状态检查开始。等到完成。
工作流完成后, Code Scanning Results / CodeQL状态检查将失败。请注意,代码扫描已检测到此拉请求引入了新的安全警报。

直接在拉动请求中,您会注意到GitHub代码扫描机器人已将拉动请求的评论带有安全警报详细信息。这将有助于开发人员快速确定其拉力请求中引入的安全问题。

这还允许开发人员和安全团队之间的协作讨论安全警报以及如何纠正它。

单击“新Code Scanning Alert以跳至Security选项卡并查看安全警报详细信息Show more details 。

请注意,安全警报是In pull request找到的,而不是在main部门(生产)中找到的。
准备谈论GitHub Enterprise的高级安全功能吗?联系销售以获取更多信息!
请查看GitHub的安全功能页面,以获取更多嵌入GitHub的安全功能。
查看代码扫描文档以获取其他配置选项和技术详细信息。