[Git] GitHub Dependabot自動建立Pull Request修正安全性漏洞

GitHub在今年推出了基於GitHub Security Advisory API 的Dependabot,幫助使用者追蹤模組依賴關係、監控程式的安全性,並透過自動建立Pull Request來修正程式漏洞;以Python來舉例,使用者經常會使用requirements.txt來管理pip的模組,Dependabot可以自動偵測requirements.txt中具有安全性疑慮的模組版本,並通知使用者,以及自動建立Pull Request來協助使用者更新。

使用GitHub管理程式的人應該都有收過類似下面的信件,告知程式中有安全性漏洞並請使用者更新;因為我自己有些程式並不是完整的程式,可能只是一些功能的Demo,或者一些寫到一半的Memo,也或者某些模組更新後必須修改程式,所以我很懶得把程式Pull下來、更新漏洞、再Push回去,這些漏洞就會一直被放著,通知信件也會一直寄來。
2019-11-04_092407.png-GitHub Dependabot自動建立Pull Request修正安全性漏洞

所以GitHub很貼心的除了通知使用者之外,現在還可以幫助使用者直接線上修正,只需要點擊幾個按鈕;以下圖為例,如果程式中有漏洞,在進入Repository的頁面時,會看到一個安全性警告。
2019-11-04_092950.png-GitHub Dependabot自動建立Pull Request修正安全性漏洞

按下View security alert或者點選上方的Security頁籤都可以切換到安全性頁面,查詢安全性漏洞的詳細資訊;左上角會有一個Automated security fixes啟用或停用的選單,啟用的話Dependabot會自動幫你建立Pull Request,停用的話就要自己在每個Security Alert中手動建立。
2019-11-04_093056.png-GitHub Dependabot自動建立Pull Request修正安全性漏洞

這邊要補充一下,在使用者的Setting下的Security可以開啟或關閉Automated security fixes,預設應該是開啟的(未勾選),但是在我的一些Repository中Automated security fixes還是關閉(Off)的,可能是因為Beta版本或者其他因素,使用者最好依照需求自己逐一檢查每個Repository是否有開啟。
2019-11-04_101912.png-GitHub Dependabot自動建立Pull Request修正安全性漏洞

回到Security Alert,這時候使用者可以點擊任意條通知查詢詳細內容,裡面會說明要更新那些東西、為何要更新等等,這時候我遇過三種可能的狀況。

成功自動修正漏洞

如果Dependabot成功的幫你自動修正了,在Security Alert中會出現提示,同時也會建立一個新的Pull Request,這時候就可以到Pull Request頁籤進行Merge;要注意無論手動或自動,Dependabot都不會自動幫你Merge Pull Request,並且如果Merge時有Conflict,使用者也必須於線上自行修改。
2019-11-04_093251.png-GitHub Dependabot自動建立Pull Request修正安全性漏洞

手動修正漏洞

如果Automated security fixes是關閉的,在Security Alert中使用者可以點擊Create automated security fixes按鈕來建立Pull Request,之後還是必須手動進行Merge。
2019-11-04_093635.png-GitHub Dependabot自動建立Pull Request修正安全性漏洞

無法修正漏洞

另外也有可能遇到無法修正的狀況,這時候Dependabot會提示無法更新,使用者可以在View details about this error來了解詳細的狀況。
2019-11-04_093634.png-GitHub Dependabot自動建立Pull Request修正安全性漏洞

無論手動或自動,在成功建立Pull Request之後,可以切換到Pull Request頁籤看到Dependabot建立的Pull Request,後面會帶有dependencies的標籤。
2019-11-04_093311.png-GitHub Dependabot自動建立Pull Request修正安全性漏洞

點擊進去該Pull Request之後,可以看到一些詳細的說明,例如更新了pip的requirements.txt中的某個模組版本,在這邊就會有這個模組的Release notes或者Changelog說明更新的內容,以及模組更新的Commits等資訊,另外在Files changed頁籤中,可以看到Dependabot對程式修改的內容。
2019-11-04_093354.png-GitHub Dependabot自動建立Pull Request修正安全性漏洞

確認修正內容正確之後,將頁面往下拉,就可以看到Merge的檢查結果與進行Merge的按鈕了;如果檢查到有Conflict出現會出現警告,並且提供一個線上編輯器讓使用者修正;如果沒有Conflict,就可以按下Merge pull request按鈕,輸入自訂的Commit內容或者使用Dependabot產生的Commit,最後進行Merge、Squash merge、或Rebase merge來完成漏洞的修正。
2019-11-04_093408.png-GitHub Dependabot自動建立Pull Request修正安全性漏洞
最後,Dependabot還有一些進階功能,使用者可以在repository建立一個.dependabot的資料夾,在資料夾中建立config.yml這個檔案來對Dependabot進行進階設定,例如模組管理、模組清單的路徑、自動合併等等,詳細的設定內容與範例可以參考Dependabot config files的說明。

留言

張貼留言