diff --git a/.gitea/ai-review/findings.json b/.gitea/ai-review/findings.json index fe51488..63b8772 100644 --- a/.gitea/ai-review/findings.json +++ b/.gitea/ai-review/findings.json @@ -1 +1,65 @@ -[] +[ + { + "level": "critical", + "role": "Rex", + "location": "entrypoint.sh:L71 (舊版)", + "suggestion": "舊版腳本直接使用 `unzip \"$RELEASE_NAME\" -d output` 解壓縮檔案,存在 Zip Slip (路徑遍歷) 漏洞風險。惡意壓縮檔可能包含 `../../etc/passwd` 等路徑,導致任意檔案被覆蓋或寫入。新版腳本新增了 `validate_release_archive` 函數來檢查壓縮檔內容,有效防範此類攻擊,這是非常關鍵的安全改進。", + "is_new": true + }, + { + "level": "critical", + "role": "Rex", + "location": "entrypoint.sh:L90 (舊版)", + "suggestion": "舊版腳本在推送 NuGet 套件時使用了 `--allow-insecure-connections` 旗標,這意味著 `RUNNER_TOKEN` 可能會透過未加密的 HTTP 連線傳輸,容易被中間人攻擊竊取。新版腳本移除了此旗標,強制使用安全的 HTTPS 連線,這是非常重要的安全強化。應始終優先使用加密連線來傳輸敏感資料。", + "is_new": true + }, + { + "level": "critical", + "role": "Rex", + "location": "entrypoint.sh:L19-L26 (舊版), L69 (舊版)", + "suggestion": "舊版腳本直接將敏感的 `RUNNER_TOKEN` 變數值輸出到標準輸出,這可能導致令牌洩漏到日誌或執行環境中。新版腳本透過 `require_value` 函數對敏感變數進行遮罩處理,是一個重要的安全改進。建議所有包含敏感資訊(如 API 金鑰、密碼、令牌)的變數在輸出時都應進行遮罩或避免直接輸出。", + "is_new": true + }, + { + "level": "warning", + "role": "Aria", + "location": "a/entrypoint.sh:3,6,27,30,32,35,40,43,45,48,50,53,55,58,60,63,66,68,71,74", + "suggestion": "腳本中的區塊標題格式不一致且手動維護。建議使用一個專門的函數來生成標準化的區塊標題,以提高一致性與可讀性。", + "is_new": true + }, + { + "level": "warning", + "role": "Aria", + "location": "a/entrypoint.sh:44,47", + "suggestion": "將變數內容傳遞給 `jq` 時,使用 `printf '%s'` 而非 `echo` 更為安全,因為 `echo` 在不同 shell 中對特殊字元(如反斜線)的處理可能不一致。", + "is_new": true + }, + { + "level": "warning", + "role": "Aria", + "location": "a/entrypoint.sh:62", + "suggestion": "`dotnet nuget push \"output/*.nupkg\"` 依賴 shell 的萬用字元展開,這在沒有匹配檔案或匹配檔案過多時可能導致錯誤。建議使用 `find` 命令安全地列出所有 `.nupkg` 檔案,並逐一推送,以提高腳本的健壯性。", + "is_new": true + }, + { + "level": "info", + "role": "Leo", + "location": "entrypoint.sh", + "suggestion": "腳本中包含多處硬編碼的繁體中文錯誤訊息(例如 `錯誤:...`)。若團隊成員或使用者可能來自不同語言背景,考慮將錯誤訊息國際化(例如,透過環境變數或外部設定檔提供不同語言版本),或統一使用英文以提高通用性,有助於長期維護和跨文化協作。", + "is_new": true + }, + { + "level": "info", + "role": "Aria", + "location": "a/Dockerfile:5", + "suggestion": "在 Dockerfile 或腳本中,建議使用 `apt-get` 而非 `apt` 進行套件管理操作,因為 `apt-get` 在非互動式環境中行為更穩定且可預測。", + "is_new": true + }, + { + "level": "info", + "role": "Aria", + "location": "a/Dockerfile:9", + "suggestion": "空行不應包含額外的縮排空格,以保持格式一致性。", + "is_new": true + } +]