bugfix(#24 #25):PBKDF2 600k→100k(CF Workers runtime 上限,真雲 bootstrap 500)+http_request 補 global_fetch_strictly_public(1042) #56

Merged
Leo merged 1 commits from fix-pbkdf2-cf-limit into main 2026-07-14 13:23:58 +00:00
Owner

修什麼(#24 #25 bugfix + 1042 flag)

T6-cloud 部署抓到的框架蟲:portal-auth 的 PBKDF2 設 600,000 迭代,但 Cloudflare Workers 正式 runtime 的 PBKDF2 上限是 100,000——超過時 crypto.subtle.deriveBits 直接拒絕 → /portal/admin/bootstrap 在真雲端 500。miniflare 無此限制=本機測試全綠的假象。

真雲實撞證據:2026-07-14 uncle6 部署排練,見 arcrun-rag docs/manual/uncle6-deploy-record.md

改動

  1. cypher-executor/src/lib/portal-auth.tsPBKDF2_ITERATIONS 600_000 → 100_000,註解寫明平台封頂(OWASP 建議 600k 但 CF 只給 100k);儲存格式 pbkdf2-sha256$<iterations>$… 自帶迭代數,未來平台放寬可無痛升。
  2. verify 相容性確認+補測試verifyPassword iterations 從儲存值解析——新增測試「驗 600k 舊 hash 仍通」(miniflare 造,綠)。誠實邊界:真雲 deriveBits 同樣封頂、600k hash 真雲仍拒;所幸真雲 bootstrap 從未成功過 → 雲端零存量 600k hash、無實際遷移面。
  3. 順手(部署 agent 點名同 PR).component-builds/http_request/wrangler.toml compatibility_flags 補 global_fetch_strictly_public——self-hosted 同帳號 fetch 1042 的正解(Arcrun#33 同族);官方部署本就跨 zone、加 flag 行為不變,原理同 cypher 前例(rules/03 的 1042 段)。
  4. SDD:portal-auth design.md D-5 加修訂註、tasks.md 加 Bugfix 記錄;wiki status 已更新。

驗證

  • cypher tsc exit 0;全套 169/170(唯一失敗=executor「不存在的零件」pre-existing,wiki 記載)
  • portal 三套 56/56 全綠(portal-auth 21 含新 600k 相容測試/portal-data 21/portal-admin 14)
  • http_request wrangler deploy --dry-run 打包過

不 merge,待總管審(B 類流程);merge 後部署走 gated wrangler 直推。

🤖 Generated with Claude Code

## 修什麼(#24 #25 bugfix + 1042 flag) **T6-cloud 部署抓到的框架蟲**:portal-auth 的 PBKDF2 設 600,000 迭代,但 **Cloudflare Workers 正式 runtime 的 PBKDF2 上限是 100,000**——超過時 `crypto.subtle.deriveBits` 直接拒絕 → `/portal/admin/bootstrap` 在真雲端 500。miniflare 無此限制=本機測試全綠的假象。 **真雲實撞證據**:2026-07-14 uncle6 部署排練,見 arcrun-rag `docs/manual/uncle6-deploy-record.md`。 ## 改動 1. `cypher-executor/src/lib/portal-auth.ts`:`PBKDF2_ITERATIONS` 600_000 → **100_000**,註解寫明平台封頂(OWASP 建議 600k 但 CF 只給 100k);儲存格式 `pbkdf2-sha256$<iterations>$…` 自帶迭代數,未來平台放寬可無痛升。 2. **verify 相容性確認+補測試**:`verifyPassword` iterations 從儲存值解析——新增測試「驗 600k 舊 hash 仍通」(miniflare 造,綠)。誠實邊界:真雲 deriveBits 同樣封頂、600k hash 真雲仍拒;所幸真雲 bootstrap 從未成功過 → 雲端零存量 600k hash、無實際遷移面。 3. **順手(部署 agent 點名同 PR)**:`.component-builds/http_request/wrangler.toml` compatibility_flags 補 `global_fetch_strictly_public`——self-hosted 同帳號 fetch 1042 的正解(Arcrun#33 同族);官方部署本就跨 zone、加 flag 行為不變,原理同 cypher 前例(rules/03 的 1042 段)。 4. SDD:portal-auth design.md D-5 加修訂註、tasks.md 加 Bugfix 記錄;wiki status 已更新。 ## 驗證 - cypher `tsc` exit 0;全套 **169/170**(唯一失敗=executor「不存在的零件」pre-existing,wiki 記載) - portal 三套 **56/56 全綠**(portal-auth 21 含新 600k 相容測試/portal-data 21/portal-admin 14) - http_request `wrangler deploy --dry-run` 打包過 **不 merge,待總管審**(B 類流程);merge 後部署走 gated wrangler 直推。 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Leo added 1 commit 2026-07-14 12:44:11 +00:00
- portal-auth.ts PBKDF2_ITERATIONS 600_000→100_000:CF Workers 正式 runtime 的
  PBKDF2 上限 100k,crypto.subtle.deriveBits 超過直接拒絕 → /portal/admin/bootstrap
  真雲 500(2026-07-14 uncle6 T6-cloud 實撞,證據 arcrun-rag docs/manual/
  uncle6-deploy-record.md);miniflare 無此限制=本機全綠假象。儲存格式自帶迭代數,
  平台放寬可無痛升。
- 補測試「驗 600k 舊 hash 仍通」(verify 從儲存值解析 iterations;誠實邊界:真雲
  deriveBits 同樣封頂,但真雲 bootstrap 從未成功→零存量 hash 無遷移面)。
- .component-builds/http_request/wrangler.toml 補 global_fetch_strictly_public
  (self-hosted 同帳號 fetch 1042 正解,Arcrun#33 同族;官方跨 zone 行為不變,
  原理同 cypher 前例 rules/03 1042 段)。
- SDD:design D-5 修訂註+tasks Bugfix 記錄;wiki status 更新。
- 驗證:cypher tsc 0;169/170(唯一失敗 pre-existing);portal 三套 56/56;
  http_request wrangler --dry-run 過。不 merge 待總管審。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Leo merged commit 1e85dfb49b into main 2026-07-14 13:23:58 +00:00
Sign in to join this conversation.