Skip to content

fix(cloudflare): cf-as 擋掉夾帶空白的唯讀 token,不只擋空值 - #12

Merged
charliie-dev merged 1 commit into
mainfrom
fix/cf-as-token-whitespace
Aug 2, 2026
Merged

fix(cloudflare): cf-as 擋掉夾帶空白的唯讀 token,不只擋空值#12
charliie-dev merged 1 commit into
mainfrom
fix/cf-as-token-whitespace

Conversation

@charliie-dev

Copy link
Copy Markdown
Owner

[ -z "$token" ] 只擋得住空字串。全是空白的值會被當成有效 token export 成 CLOUDFLARE_API_TOKEN,把 Authorization 塌成裸 Bearer,直到 API 層才以認證失敗收場;夾帶 LF 或 CR 的值更早壞掉,Go 的 net/http 在連線前就以 net/http: invalid header field value for "Authorization" 拒絕,錯誤訊息指不到 Doppler 也指不到呼叫端。

Cloudflare API token 的字元集不含空白(provider 5.22 對 api_token 的驗證式是 ^[0-9A-Za-z-_]{40,80}$),所以值裡出現空白一定代表這份機密被填壞了。注入路徑 (Doppler env 格式只轉義 \ 與 ",加上 zsh.envExtra 的 set -a + source)會原樣保留空白與 換行,三種形狀都真的到得了這裡。

改成 case 擋 "" 與 [[:space:]],語意與 home-lab cloudflare/.mise/tasks/lib/cf-auth 的 cf_token_is_valid 一致。刻意只驗證、不 trim 後照用:靜默改掉一份壞掉的憑證只會讓「為什麼 認證失敗」更難查。Doppler 那兩行修法照舊,只有第一行「是空的」不再準確,跟著改掉。

帳號->變數名的跨 repo 重複維持原樣,見檔頭註解與 home-lab cloudflare/README.md。

[ -z "$token" ] 只擋得住空字串。全是空白的值會被當成有效 token export 成
CLOUDFLARE_API_TOKEN,把 Authorization 塌成裸 Bearer,直到 API 層才以認證失敗收場;夾帶
LF 或 CR 的值更早壞掉,Go 的 net/http 在連線前就以 `net/http: invalid header field value
for "Authorization"` 拒絕,錯誤訊息指不到 Doppler 也指不到呼叫端。

Cloudflare API token 的字元集不含空白(provider 5.22 對 api_token 的驗證式是
^[0-9A-Za-z\-_]{40,80}$),所以值裡出現空白一定代表這份機密被填壞了。注入路徑
(Doppler env 格式只轉義 \ 與 ",加上 zsh.envExtra 的 set -a + source)會原樣保留空白與
換行,三種形狀都真的到得了這裡。

改成 case 擋 "" 與 *[[:space:]]*,語意與 home-lab cloudflare/.mise/tasks/lib/cf-auth 的
cf_token_is_valid 一致。刻意只驗證、不 trim 後照用:靜默改掉一份壞掉的憑證只會讓「為什麼
認證失敗」更難查。Doppler 那兩行修法照舊,只有第一行「是空的」不再準確,跟著改掉。

帳號->變數名的跨 repo 重複維持原樣,見檔頭註解與 home-lab cloudflare/README.md。
@charliie-dev
charliie-dev merged commit 7bd4e2e into main Aug 2, 2026
1 check failed
@charliie-dev
charliie-dev deleted the fix/cf-as-token-whitespace branch August 2, 2026 17:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant