處理 AI review findings 並改寫 Node.js entrypoint #2

Merged
admin merged 59 commits from develop into master 2026-06-24 14:13:11 +00:00
Showing only changes of commit a9144a4b21 - Show all commits
+52 -3
View File
@@ -11,9 +11,15 @@
"level": "critical",
"role": "Assassin",
"location": "Dockerfile:16",
"problem": "從未經驗證的遠端 git 儲存庫安裝插件,若儲存庫內容遭竄改,將導致任意程式碼執行風險。同時,直接執行從外部網路下載的腳本,且未經過 Hash 檢查或簽章驗證,是嚴重供應鏈攻擊破口。",
"suggestion": "必須鎖定特定 commit hash (SHA) 來引用插件,並對下載的腳本進行 SHA-256 雜湊驗證。",
"is_new": false
"problem": "直接從網址下載並執行安裝腳本,未鎖定版本或驗證 checksum,且從未經驗證的遠端儲存庫安裝插件,存在嚴重供應鏈攻擊風險。",
"suggestion": "必須鎖定特定 commit hash (SHA) 來引用插件,並將安裝腳本下載至本地,進行 SHA-256 雜湊驗證。"
},
{
"level": "critical",
"role": "Assassin",
"location": "Dockerfile:17",
"problem": "Dockerfile 直接從外部連結下載並執行腳本,且未驗證其雜湊值,若來源遭攔截或篡改,將導致任意程式碼執行。",
"suggestion": "下載指令碼後,務必使用 sha256sum 或其他雜湊函數驗證其完整性,確保與預期內容一致後再執行。"
},
{
"level": "critical",
@@ -30,5 +36,48 @@
"problem": "新增了 Codex CLI 的安裝與插件註冊過程,但沒有對應的測試來驗證安裝是否成功、插件是否正確載入。",
"suggestion": "應在測試套件中加入 Docker 映像檔的整合測試,驗證容器啟動後 `codex --version` 及插件列表是否存在。",
"is_new": false
},
{
"level": "warning",
"role": "Assassin",
"location": "Dockerfile:10",
"problem": "Codex 外掛市集來源指向 `gitea.jsc.idv.tw`,未驗證來源的安全性。若該伺服器遭駭,將導致自動安裝惡意或篡改過的外掛,進而導致供應鏈攻擊。",
"suggestion": "若可能,請將外掛來源固定在受信任的內部儲存庫或使用經簽署的外掛版本。確保來源伺服器具有嚴格的存取控管與安全性掃描。",
"is_new": true
},
{
"level": "warning",
"role": "Leo",
"location": "Dockerfile:10",
"problem": "環境變數使用以空格分隔的字串,若未來名稱中包含空格將導致 shell 展開錯誤,且難以維護。",
"suggestion": "建議改用換行符號(\n)分隔,並在安裝迴圈中使用 `IFS=$'\n'` 處理,以提高 shell 指令的健壯性。"
},
{
"level": "warning",
"role": "Bard",
"location": "Dockerfile:17",
"problem": "將安裝腳本邏輯直接寫在 `RUN` 指令中顯得冗長,且使用 `$(mktemp)` 容易產生難以追蹤的臨時檔案。",
"suggestion": "考慮將安裝邏輯封裝成一個獨立的 script 檔案,讓 `Dockerfile` 更簡潔優雅。"
},
{
"level": "warning",
"role": "Bard",
"location": "entrypoint.sh:45",
"problem": "使用靜態路徑檢查 `auth.json` 是否存在,若前次執行中斷導致檔案未清除,會導致後續執行失敗(Self-inflicted DoS)。",
"suggestion": "移除對既有檔案的檢查,改為在執行前確保該檔案為最新且受控狀態,或使用唯一的隨機臨時檔。"
},
{
"level": "warning",
"role": "Bard",
"location": "tests/entrypoint_test.sh:17",
"problem": "在測試中建立 `codex` 指令時,Here-document 與命令混雜,可讀性較低。",
"suggestion": "建議使用更整齊的縮排格式,或將其抽離為獨立的測試輔助檔案。"
},
{
"level": "info",
"role": "Maya",
"location": "tests/entrypoint_test.sh:65",
"problem": "測試案例對於輸入參數的邊界測試(例如 `PROMPT` 為空字串、極長字串)不足。",
"suggestion": "增加針對 `PROMPT` 輸入為空字串或是包含特殊 Shell 跳脫字元的測試案例。"
}
]