diff --git a/.gitea/ai-review/exclusions.json b/.gitea/ai-review/exclusions.json new file mode 100644 index 0000000..7308d99 --- /dev/null +++ b/.gitea/ai-review/exclusions.json @@ -0,0 +1,38 @@ +[ + { + "level": "critical", + "role": "Maya", + "location": "entrypoint.sh", + "suggestion": "此 Git Diff 引入了多項邏輯改動,但未見任何新增或修改的測試檔案。對於核心的 `entrypoint.sh` 腳本,應引入一個專用的測試框架(例如 Bats 或 shUnit2),並建立一套全面的單元測試與整合測試,以確保所有功能按預期運作,特別是對於錯誤處理和邊界條件的驗證。" + }, + { + "level": "warning", + "role": "Zara", + "location": "entrypoint.sh:56", + "suggestion": "目前的健康檢查機制中,`curl` 的最大等待時間 (`--max-time 60`) 和重試間隔 (`sleep 60`) 都固定為 60 秒。這導致每次檢查失敗後,至少需要 120 秒才能進行下一次嘗試,大幅降低了健康檢查的響應速度。建議將這些時間參數設定為可配置的環境變數 (例如 `CURL_TIMEOUT` 和 `RETRY_INTERVAL`),以便根據實際應用場景調整。對於需要快速偵測服務狀態變化的情境,應考慮縮短這些時間。" + }, + { + "level": "warning", + "role": "Rex", + "location": "Dockerfile:10", + "suggestion": "Dockerfile 中複製了 `rootCA.pem` 和 `jsc.idv.me+4.pem` 到容器中。請確保這些檔案僅包含公開的憑證資料,不包含任何私鑰或其他敏感資訊。若這些檔案包含私鑰,則會構成嚴重的安全漏洞。建議在 CI/CD 流程中增加檢查,確保這些檔案的內容符合預期。" + }, + { + "level": "warning", + "role": "Aria", + "location": "Dockerfile:15", + "suggestion": "檔案末尾應包含一個空行,以符合 POSIX 規範並避免某些工具處理時產生問題。" + }, + { + "level": "info", + "role": "Leo", + "location": "Dockerfile", + "suggestion": "在 Dockerfile 中,部分描述性註解被移除。雖然指令本身清晰且符合 Dockerfile 簡潔的趨勢,但對於不熟悉此映像檔用途或 Dockerfile 最佳實踐的開發者來說,簡潔的註解(例如說明為何複製特定憑證或更新 CA 證書的目的)可以提高首次閱讀時的理解性。建議考慮在關鍵步驟旁添加簡要註解,以平衡簡潔性與可讀性。" + }, + { + "level": "info", + "role": "Maya", + "location": "Dockerfile", + "suggestion": "雖然 Dockerfile 本身不是應用程式程式碼,但其建置過程和最終映像檔的品質對整體系統至關重要。建議導入 Docker 映像檔建置測試工具(例如 Hadolint 進行靜態分析,或 Container Structure Test 進行運行時驗證),以確保映像檔的安全性、效率和正確性,例如檢查是否安裝了所有必要的工具,以及證書是否正確配置。" + } +] diff --git a/.gitea/ai-review/findings.json b/.gitea/ai-review/findings.json index 1280c8a..fe51488 100644 --- a/.gitea/ai-review/findings.json +++ b/.gitea/ai-review/findings.json @@ -1,58 +1 @@ -[ - { - "level": "critical", - "role": "Rex", - "location": "entrypoint.sh:44", - "suggestion": "變數 `CHECK_URL` 直接用於 `curl` 命令中,存在命令注入風險。惡意使用者可以透過在 `CHECK_URL` 中注入 `curl` 選項(例如 `-X POST` 或 `--output`)來改變 `curl` 的行為,甚至可能導致敏感資料洩漏或執行非預期操作。建議使用 `curl --url \"$CHECK_URL\"` 來明確指定參數為 URL,防止其被解析為 `curl` 選項。此外,應對 `CHECK_URL` 進行嚴格的 URL 格式驗證,確保其不包含任何惡意字元或選項。", - "is_new": true - }, - { - "level": "critical", - "role": "Maya", - "location": "entrypoint.sh", - "suggestion": "此 Git Diff 引入了多項邏輯改動,但未見任何新增或修改的測試檔案。對於核心的 `entrypoint.sh` 腳本,應引入一個專用的測試框架(例如 Bats 或 shUnit2),並建立一套全面的單元測試與整合測試,以確保所有功能按預期運作,特別是對於錯誤處理和邊界條件的驗證。", - "is_new": true - }, - { - "level": "warning", - "role": "Zara", - "location": "entrypoint.sh:56", - "suggestion": "目前的健康檢查機制中,`curl` 的最大等待時間 (`--max-time 60`) 和重試間隔 (`sleep 60`) 都固定為 60 秒。這導致每次檢查失敗後,至少需要 120 秒才能進行下一次嘗試,大幅降低了健康檢查的響應速度。建議將這些時間參數設定為可配置的環境變數 (例如 `CURL_TIMEOUT` 和 `RETRY_INTERVAL`),以便根據實際應用場景調整。對於需要快速偵測服務狀態變化的情境,應考慮縮短這些時間。", - "is_new": true - }, - { - "level": "warning", - "role": "Rex", - "location": "Dockerfile:10", - "suggestion": "Dockerfile 中複製了 `rootCA.pem` 和 `jsc.idv.me+4.pem` 到容器中。請確保這些檔案僅包含公開的憑證資料,不包含任何私鑰或其他敏感資訊。若這些檔案包含私鑰,則會構成嚴重的安全漏洞。建議在 CI/CD 流程中增加檢查,確保這些檔案的內容符合預期。", - "is_new": true - }, - { - "level": "warning", - "role": "Aria", - "location": "Dockerfile:15", - "suggestion": "檔案末尾應包含一個空行,以符合 POSIX 規範並避免某些工具處理時產生問題。", - "is_new": true - }, - { - "level": "info", - "role": "Leo", - "location": "Dockerfile", - "suggestion": "在 Dockerfile 中,部分描述性註解被移除。雖然指令本身清晰且符合 Dockerfile 簡潔的趨勢,但對於不熟悉此映像檔用途或 Dockerfile 最佳實踐的開發者來說,簡潔的註解(例如說明為何複製特定憑證或更新 CA 證書的目的)可以提高首次閱讀時的理解性。建議考慮在關鍵步驟旁添加簡要註解,以平衡簡潔性與可讀性。", - "is_new": true - }, - { - "level": "info", - "role": "Rex", - "location": "Dockerfile:1", - "suggestion": "使用 `ubuntu:latest` 作為基礎映像檔可能導致非預期的行為或安全更新延遲。`latest` 標籤會隨著上游映像檔的更新而改變,使得建置結果不可重現。建議使用特定的版本標籤(例如 `ubuntu:22.04` 或 `ubuntu:20.04`)來確保建置的可預測性和安全性。", - "is_new": true - }, - { - "level": "info", - "role": "Maya", - "location": "Dockerfile", - "suggestion": "雖然 Dockerfile 本身不是應用程式程式碼,但其建置過程和最終映像檔的品質對整體系統至關重要。建議導入 Docker 映像檔建置測試工具(例如 Hadolint 進行靜態分析,或 Container Structure Test 進行運行時驗證),以確保映像檔的安全性、效率和正確性,例如檢查是否安裝了所有必要的工具,以及證書是否正確配置。", - "is_new": true - } -] +[] diff --git a/Dockerfile b/Dockerfile index 01abb7f..559f0d2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:latest +FROM ubuntu:24.04 RUN apt-get update \ && apt-get install -y --no-install-recommends curl \ diff --git a/entrypoint.sh b/entrypoint.sh index 3401e37..efcb439 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -48,7 +48,7 @@ log "[INFO] 開始檢查:$CHECK_URL" while true; do printf '[%s] [INFO] GET %s ... ' "$(timestamp)" "$CHECK_URL" - status_code="$(curl -sS --max-time 60 -o /dev/null -w '%{http_code}' "$CHECK_URL" || true)" + status_code="$(curl -sS --max-time 60 --url "$CHECK_URL" -o /dev/null -w '%{http_code}' || true)" if [ -z "$status_code" ]; then status_code="000" fi