在 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 有興趣的朋友可以自行安裝使用看看:
圖片

相信可以幫助到你。🥂

留言

這個網誌中的熱門文章

使用LM Studio輕鬆在本地端以API呼叫大語言模型(LLM)

VS Code的字體大小

使用 Dify 建立企業請假機器人

使用C#開發LineBot(3) - 使用LineBotSDK發送Line訊息

使用Qdrant向量資料庫實作語意相似度比對