歡迎使用代碼掃描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的安全功能。
查看代碼掃描文檔以獲取其他配置選項和技術詳細信息。