security: 2026-06-11 稽核修補——封鎖 admin/register P0 漏洞、is_verified 業務約束、預約核心測試 #28

Merged
a620906209 merged 7 commits from fix/audit-remediation into master 2026-06-11 10:21:33 +00:00
Owner

摘要

docs/analysis/2026-06-11-spec-implementation-audit.md 稽核報告執行四階段修補。

注意:本分支以 test/auth-tests-coverage 為基底,merge 本 PR 會一併帶入 PR #27 的 auth 測試(PR #27 可改為關閉)。

變更內容

🔴 P0:封鎖公開 admin 註冊

  • 移除 POST /api/admin/register 路由、AuthController::registerAdmin、對應 Swagger 文件
  • 新增 php artisan app:create-admin(密碼門檻 min:8),管理員一律由主機端建立
  • AdminAccountCreationTest 4 案例防止端點被重新打開

🟠 P1:is_verified 最小業務語意

  • DivingOffer::visibleToPublic scope:未驗證教練課程從公開列表排除、詳情 404;provider_id null 不受限
  • toggle-verified 後 flush diving_offers 快取,切換立即生效
  • 新增 provider-verification 規格 + DivingOfferVisibilityTest 7 案例

🟠 P1:規格漂移

  • login-rate-limiting 規格同步至實作值 10/min

🟡 P2:預約核心測試(39 案例)

  • 狀態機 17、防超賣 3、Scheduler 6、聊天授權 8、Admin 權限邊界 5

規格清理

  • auth-test-coverage Purpose、member-portal-ui repo 描述、admin-auth 補端點
  • 收錄稽核報告、路線圖、效能優化計畫三份文檔

測試

容器內 php artisan test146 passed / 378 assertions 全綠。
(本機 laragon PHP 缺 GD,CourseImageTest 需在容器內跑)

行為變更提醒

  • DemoSeeder 中 1 位未驗證教練(is_verified=false)的課程將從公開列表消失——這是新規則的預期展示
  • 任何依賴 POST /api/admin/register 的工具(如 Postman collection)需改用 app:create-admin

🤖 Generated with Claude Code

## 摘要 依 `docs/analysis/2026-06-11-spec-implementation-audit.md` 稽核報告執行四階段修補。 > **注意**:本分支以 `test/auth-tests-coverage` 為基底,merge 本 PR 會一併帶入 PR #27 的 auth 測試(PR #27 可改為關閉)。 ## 變更內容 ### 🔴 P0:封鎖公開 admin 註冊 - 移除 `POST /api/admin/register` 路由、`AuthController::registerAdmin`、對應 Swagger 文件 - 新增 `php artisan app:create-admin`(密碼門檻 min:8),管理員一律由主機端建立 - `AdminAccountCreationTest` 4 案例防止端點被重新打開 ### 🟠 P1:is_verified 最小業務語意 - `DivingOffer::visibleToPublic` scope:未驗證教練課程從公開列表排除、詳情 404;`provider_id` null 不受限 - `toggle-verified` 後 flush `diving_offers` 快取,切換立即生效 - 新增 `provider-verification` 規格 + `DivingOfferVisibilityTest` 7 案例 ### 🟠 P1:規格漂移 - `login-rate-limiting` 規格同步至實作值 10/min ### 🟡 P2:預約核心測試(39 案例) - 狀態機 17、防超賣 3、Scheduler 6、聊天授權 8、Admin 權限邊界 5 ### 規格清理 - `auth-test-coverage` Purpose、`member-portal-ui` repo 描述、`admin-auth` 補端點 - 收錄稽核報告、路線圖、效能優化計畫三份文檔 ## 測試 容器內 `php artisan test`:**146 passed / 378 assertions** 全綠。 (本機 laragon PHP 缺 GD,CourseImageTest 需在容器內跑) ## 行為變更提醒 - DemoSeeder 中 1 位未驗證教練(is_verified=false)的課程將從公開列表消失——這是新規則的預期展示 - 任何依賴 `POST /api/admin/register` 的工具(如 Postman collection)需改用 `app:create-admin` 🤖 Generated with [Claude Code](https://claude.com/claude-code)
a620906209 added 7 commits 2026-06-11 10:19:39 +00:00
P0 漏洞:原 POST /api/admin/register 無任何防護,任何人可註冊管理員帳號。
- 移除路由、AuthController::registerAdmin、對應 Swagger 文件
- 新增 app:create-admin artisan command(密碼門檻 min:8)
- 補 AdminAccountCreationTest 防止端點被重新打開
- 同步 admin-auth 規格,並收錄 2026-06-11 稽核報告與路線圖文檔

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
規格原寫 5/min,實作與測試(commit 0dabc4e)皆為 throttle:10,1,
以實作為準消除規格漂移,並註記放寬理由(帳號鎖定已涵蓋暴力破解防護)。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
is_verified 原本只有 Admin toggle 開關、無任何業務約束(稽核 P1-1)。
- DivingOffer 新增 visibleToPublic scope:provider_id null 或教練已驗證
- 公開 index/show 套用過濾,未驗證教練課程列表排除、詳情 404
- toggle-verified 後 flush diving_offers 快取標籤,切換立即生效
- 新增 provider-verification 規格(含已知限制註記)與 7 條可見性測試

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
稽核 P2-1:平台核心業務(預約)原本零測試覆蓋。
- BookingLifecycleTest:七狀態機合法/非法轉移、名額帳務、24h 取消截止、授權邊界(17 案例)
- BookingOversellTest:confirm 時 lockForUpdate 防超賣不變式、名額釋放回收(3 案例)
- BookingSchedulerTest:48h 過期與日期完成的時間邊界(6 案例)
- BookingChatAuthTest:HTTP 與 presence channel 雙防線(8 案例)
- AdminEndpointAuthTest:非 admin 一律 403、Admin 不可繞過狀態機(5 案例)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- auth-test-coverage:補歸檔後遺留的 TBD Purpose
- member-portal-ui:前端實際位於本 repo frontend/,修正獨立 repo 描述
- admin-auth:補 check-member / check-provider 端點規格

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
原 test_admin_register_* 測的是已移除的 P0 漏洞端點,
端點關閉防護與帳號建立改由 AdminAccountCreationTest 覆蓋。
容器內全套件 146 passed / 378 assertions。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
實測:API 快取命中仍 2.49s、容器測試比本機慢 14 倍;
容器內 opcache 已載入但 disabled。計畫分三階段,O1.1 啟用
OPcache 為最高投報率項目。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
a620906209 merged commit 0dffca31bb into master 2026-06-11 10:21:33 +00:00
a620906209 deleted branch fix/audit-remediation 2026-06-11 10:21:33 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: a620906209/CFDivePlatform#28