在 CI Pipeline 中使用 gpt-4o 進行自動化程式碼安全性掃描
我曾經在這邊介紹過,我們可以透過 Azure DevOps 外掛的套件,在 CI Pipeline 中利用 AI (如今是 gpt-4o) 進行自動化 code review。
舉例來說,當我們在 commit 中,把程式碼改成底下這樣:
public float Calculate()
{
int para=0;
float result = 0;
float height = (int)Height / 100;
result = Weight / (height * height);
result = result/0;
//todo: 分析BMI計算結果
return result;
}
這時,PR 所觸發的 Pipeline,會在運行過程中,透過 gpt-4o 幫我們掃瞄出底下的 code review 報告:
- 在
float height = (int)Height / 100;
這行中,將Height
強制轉換為int
可能會導致精度損失,建議保持float
類型以確保計算的準確性。 - 在
result = result/0;
這行中,除以零會導致運行時錯誤或異常,這是一個嚴重的錯誤,需要修正。 - 變數
int para=0;
被宣告但未使用,這是多餘的代碼,應該移除以提高代碼的可讀性和效率。
如下圖:
這可以幫上 reviewer 不少忙。
使用 AI 作安全性檢查
最近,心血來潮,想說既然 AI 可以 code review,不如在 prompt 中加上一些檢查安全性的提示,來看看結果如何。
底下我刻意修改了的一些可能有安全性顧慮的程式碼:
public void Save(string userInputFileName)
{
string password = "P@ssw0rd123";
Random random = new Random();
int secureToken = random.Next();
Console.WriteLine(secureToken);
string filePath = "D:/some/directory/" + userInputFileName;
File.ReadAllText(filePath);
}
public void GetUserData(string userInput, SqlConnection connection)
{
string query = $"SELECT * FROM Users WHERE Username = '{userInput}'";
using (SqlCommand command = new SqlCommand(query, connection))
{
// 執行查詢
}
}
讀者可以先自己看看,上面這段C#程式碼當中,可能潛藏著哪些的安全性問題?
看好之後,我們接著來看看,若是透過自動化的 code review,gpt-4o 幫可以我們找出了哪些潛在的安全性疑慮:
上圖中的問題整理如下,除了原本 Calculate() 方法中本來就存在的問題之外,還有底下幾個安全性議題:
Save
方法中,將密碼硬編碼在代碼中(string password = "P@ssw0rd123";
)是不安全的做法,應考慮使用更安全的方式來管理密碼,例如環境變量或安全存儲。Save
方法中,使用File.ReadAllText(filePath);
之前,應檢查filePath
是否存在,以避免潛在的文件未找到異常。GetUserData
方法中,使用字符串插值直接構建 SQL 查詢(string query = $"SELECT * FROM Users WHERE Username = '{userInput}'";
)會導致 SQL 注入風險,應使用參數化查詢來防止此類安全漏洞。Save
方法中,string filePath = "D:/some/directory/" + userInputFileName;
應檢查userInputFileName
的合法性,以防止目錄遍歷攻擊。
是不是? gpt-4o 作為一個 code reviewer 其實是頗好用的。
套件我升級到了 0.9.70 版,內建加入了這個功能,位於:
https://marketplace.visualstudio.com/items?itemName=tw-developer.GPTPRReviewer
使用 Azure DevOps 有興趣的朋友可以自行安裝使用看看:
相信可以幫助到你。🥂
留言