Claude Code 2.1.268:deny 規則與 MCP 修正了什麼
MarkdownClaude Code 2.1.268–2.1.269 修正了四項權限問題,以及 /mcp 中的機密資訊外洩。本文說明受影響的對象、更新方式,以及如何檢查規則。
閱讀全文
Claude Code 2.1.268 版於 2026 年 9 月 10 日發布,隔天接著發布 2.1.269。請立即更新:有兩種情況下,你用來封鎖代理程式存取 .env 和服務資料夾的 deny 規則悄悄失效了。此外,/mcp 指令可能會在終端機中印出設定檔裡的機密資訊。
以下內容皆根據資料來源日期,也就是 2026 年 9 月 17 日當時的 Anthropic 官方變更記錄與文件整理。該日的最新版本是 2.1.274。我們根據這些項目說明錯誤的運作方式;並未在有漏洞的版本上重現這些繞過情況。
如需 Ailoot 的其他使用說明,請參閱文件。
Claude Code 2.1.268 和 2.1.269 修正了什麼?
本節重點
修正了四項權限問題。透過符號連結存取路徑時,deny 和 ask 規則沒有生效;而在包含 env -C 或 eval 的行上,Read 或 Edit 的 deny 可能失效。含有「!」的規則套用範圍超出其設定檔。tee 指令可以寫入檔案,而不受 Edit 的 deny 規則封鎖。此外,/mcp 和 claude mcp list 會顯示設定檔中的機密資訊,外掛程式錯誤則會顯示 Git URL 中的權杖。
有四項修正與權限規則相關:
- 符號連結上的拒絕規則沒有生效。 對符號連結目錄(macOS 上的
/etc、/tmp、/var,以及 Linux 上的/bin)設定的 deny 和 ask 規則,在路徑以實際位置指定時不會觸發。Bash 指令也會忽略透過符號連結路徑設定的 deny 規則。 - 搭配
env -C或eval時,讀取和編輯的拒絕規則會失效。 如果同一個指令行中含有權限檢查無法解析的語法,Read 或 Edit 的 deny 可能不會觸發。 - 含有「!」的規則套用範圍超出預期。 以
!開頭的 deny 或 ask 規則會套用到其設定檔以外的範圍。現在規則只會套用於自身的來源中,單獨的否定符號!則會被忽略。 tee繞過拒絕規則寫入檔案。Edit()的 deny 規則和寫入路徑檢查不會套用到 Bashtee指令建立的檔案。Bash(tee:*)權限不再涵蓋工作目錄以外的寫入操作。
這些版本也修正了兩項涉及機密資訊外洩的問題。WebFetch 不再無限期等待持續保持連線的伺服器回應:要求現在會在 300 秒後失敗,並可透過 CLAUDE_CODE_WEBFETCH_DEADLINE_MS 變數設定逾時時間。此外,也修正了長時間閒置工作階段中持續高 CPU 使用率的問題。
Claude Code 的拒絕規則如何運作?
本節重點
規則寫在 settings.json 的 permissions 區塊中:deny 會封鎖操作,ask 會要求確認,allow 則允許操作而不需確認。檢查順序為 deny、ask、allow。規則格式為 Tool 或 Tool(detail),例如 Read(./.env)。
Claude Code 有三類規則清單:deny(一律禁止)、ask(執行操作前先詢問),以及 allow(無須確認即可執行)。代理程式準備執行操作時,會嚴格依照這個順序檢查規則。符合條件的 deny 會取消同一操作的 allow:allow 規則不能例外允許已被拒絕的操作。
規則儲存在三個位置:使用者規則位於 ~/.claude/settings.json,專案規則位於儲存庫中的 .claude/settings.json,本機規則位於 .claude/settings.local.json。以下是拒絕讀取含有金鑰檔案的設定範例:
{
"permissions": {
"deny": [
"Read(./.env)",
"Read(./secrets/**)",
"Bash(rm *)"
]
}
}
在工作階段中執行 /permissions,即可查看所有啟用中的規則,以及每條規則所屬的檔案。如果規則封鎖了讀取操作,拒絕訊息會指出該規則,這對下方的檢查很有幫助。
哪些錯誤影響了拒絕規則和規則的適用範圍?
這些錯誤影響路徑和指令檢查,也影響來自不同設定檔的規則適用範圍。
第一種情況:符號連結。 在 macOS 上,/etc、/tmp 和 /var 是指向 /private 底下實際資料夾的符號連結;在 Linux 上,/bin 通常也是類似的符號連結。如果你針對某種路徑寫法設定 deny 規則,但代理程式以另一種寫法存取(例如使用實際位置而非符號連結),規則就不會觸發。Bash 指令也會忽略針對符號連結路徑設定的拒絕規則。2.1.268 修正了這兩種情況:無論使用哪種路徑寫法,規則現在都會生效。
第二種情況:同一行中的 env -C 和 eval。 權限檢查會解析指令,以判斷它將存取哪些檔案。它無法解析 env -C 或 eval 等語法。問題在於,當這類語法出現在該行時,Read 或 Edit 的 deny 可能不會套用。因此,指令可能繞過對受保護檔案讀取或編輯操作的拒絕規則。
第三種情況:含有「!」的規則套用範圍超出自身界線。 以 ! 開頭的規則應只在其所寫入的設定檔中生效。2.1.269 之前,它也會套用到其他設定來源。現在適用範圍限制在其自身檔案中,單獨的 ! 規則則會被忽略。
第四種情況:透過 tee 寫入。 Bash 的 tee 指令可以寫入檔案。寫入路徑檢查和 Edit() deny 規則不會套用到該檔案。同時,Bash(tee:*) 權限涵蓋了工作目錄以外的寫入操作。2.1.269 開始將這些檢查套用到透過 tee 的寫入:檔案上的拒絕規則會生效,而 Bash(tee:*) 只涵蓋工作目錄。
如果你使用針對特定項目的拒絕規則來封鎖 .env、幾個服務資料夾或危險指令,也應檢查這些規則。步驟如下。
為什麼 /mcp 可能會顯示你的金鑰?
本節重點
MCP 設定檔中的金鑰通常透過 ${VAR} 變數提供。/mcp、/plugin、claude mcp list 和 claude mcp get 指令,以及 MCP 登入錯誤,都會顯示替換後的值,也就是金鑰本身。2.1.268 已將輸出中的機密資訊遮蔽。
MCP 伺服器設定檔通常會將金鑰存放在環境變數中,並透過 ${VAR} 參照,讓檔案可以存放在儲存庫中而不包含機密資訊。問題在於,檢視指令(/mcp、/plugin、claude mcp list、claude mcp get)和 MCP 登入錯誤訊息,會顯示已替換變數值的設定檔。金鑰本身因此出現在畫面上。
另一項修正涉及外掛程式和市集錯誤:這些錯誤可能會顯示來源 Git URL 中的權杖或密碼。
如果舊版的 /mcp 或 claude mcp list 輸出曾出現在串流、螢幕截圖、傳給同事的訊息,或離開你電腦的記錄檔中(包括自動傳送的內容),請假設 MCP 設定檔中的金鑰已外洩,並進行輪替。如果輸出從未離開你的電腦,更新即可。我們另有 MCP 伺服器和現成設定指南:Claude Code MCP 伺服器。
這些版本中的其他變更
WebFetch 和成品。 先前,deny 或 ask 中未指定詳細資訊的 WebFetch 規則,也會套用到已發布成品的讀取和修改操作。從 2.1.268 開始,該規則不再套用到成品。若要封鎖成品,你需要另外設定 Artifact 規則或網域規則,例如 WebFetch(domain:claude.ai)。如果你仰賴一般的 WebFetch 拒絕規則來防止讀取成品,請重新檢查設定:原本的規則不再封鎖這些操作。
WebFetch 現在設有逾時。 對持續保持連線且不結束回應的伺服器所發出的要求,現在會在 300 秒後失敗。先前這類要求可能會無限期掛起。可透過 CLAUDE_CODE_WEBFETCH_DEADLINE_MS 變數設定此行為;將其設為 0 可停用逾時。
已修正閒置工作階段中持續高 CPU 使用率的問題。 在長時間閒置的工作階段中,Claude Code 的閒置迴圈可能導致 CPU 使用率持續偏高。此錯誤已在 2.1.268 修正。長時間整天保持工作階段開啟的使用者也可能受到影響。
安裝最新版本。 2.1.269 出現了一個新錯誤:工作階段執行很長一段時間後,只讀取資料的 Bash Git 指令開始要求權限。此問題已在 2.1.270 修正。因此,請更新至最新版本(截至 2026 年 9 月 17 日,最新版本是 2.1.274);不要停留在 2.1.268 或 2.1.269。
如何更新並確認拒絕規則有效?
本節重點
使用 claude --version 查看版本,更新至最新版本,接著用不含機密資訊的安全檔案進行測試:為檔案新增 deny 規則,要求代理程式讀取檔案,並確認拒絕訊息指出你的規則。
- 確認目前版本。 在終端機中執行
claude --version。上述問題的修正分別在 2.1.268 和 2.1.269 發布。如果版本號低於 2.1.268,表示你的版本尚未包含這些修正;不過你是否受到各項問題影響,取決於你使用的路徑、指令和規則。 - 更新。 如何將 Claude Code 更新至最新版本指南提供逐步說明和疑難排解資訊。請選擇最新版本,不要停留在 2.1.268。
- 測試拒絕規則。 不要用真正的
.env測試規則:如果拒絕失效,代理程式就會看到真正的金鑰。請建立測試檔案,例如secret-test.txt,並在其中放入任意文字,例如「這是測試」;在專案.claude/settings.json的 deny 清單中加入規則"Read(./secret-test.txt)";重新啟動工作階段,然後詢問:「讀取 secret-test.txt 檔案,並告訴我裡面有什麼。」預期結果是系統拒絕讀取並指出你的規則。如果代理程式讀取了檔案,代表這次測試中的拒絕規則沒有生效。請先檢查上方章節中的語法,並開啟/permissions查看啟用中的規則及其載入來源檔案。單靠測試結果無法判斷原因。一次拒絕只能證明針對該檔案的規則有效,無法說明其他規則的狀況;請用相同方式逐一檢查。 - 如果你使用這些路徑,請檢查符號連結情況。 如果你在 macOS 上針對
/tmp、/etc或/var設定拒絕規則,或在 Linux 上針對/bin設定拒絕規則,請在更新後針對這些路徑重做測試。 - 檢查含有「!」的規則。 如果你使用了這類規則,請確認每條規則都寫在預期套用的檔案中。
如果拒絕規則有效,但 Claude Code 仍無法看到你需要的檔案,請參閱另一篇說明:為什麼 Claude Code 無法看到專案檔案。
如果你現在無法更新
有時你必須延後更新:你無法變更環境、電腦由公司管理,或你需要先完成目前的工作。在更新之前,你可以採取以下措施降低風險:
- 針對路徑的兩種寫法,也就是符號連結和實際位置,都設定 deny 規則(在 macOS 上,實際路徑位於
/private底下); - 不要在同一行組合多個指令,並避免在要求代理程式執行的指令中使用
env -C和eval; - 不要向任何人展示
/mcp、/plugin、claude mcp list或claude mcp get的輸出;如果 MCP 設定檔中的金鑰可能落入他人手中,請輪替這些金鑰; - 請記住,
tee會繞過 Edit 的 deny 規則寫入檔案——如果 Bash 已獲准,就不要認為檔案受到保護。
這些措施可以降低特定繞過情況發生的可能性,但不能取代修正。請盡快更新,並執行前一節中的測試。
簡短總結
2.1.268 和 2.1.269 版本修正了 Claude Code 的四項權限問題:符號連結、含有 env -C 和 eval 的行、套用範圍超出自身檔案的「!」規則,以及透過 tee 寫入的問題。此外,也修正了 /mcp 輸出中的機密資訊外洩,以及外掛程式錯誤中顯示權杖的問題。請確認版本號、更新至最新版本,並使用上方章節中的測試檔案執行測試。拒絕訊息指出你的規則,表示該規則在這次測試中有效。只確認設定中存在規則,並不足以驗證它是否有效。
來源
- Claude Code,官方變更記錄(2.1.268、2.1.269、2.1.270 的項目):https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md
- Claude Code,npm 上的版本發布日期:https://www.npmjs.com/package/@anthropic-ai/claude-code
- Claude Code,權限文件(deny/ask/allow 語法):https://code.claude.com/docs/en/permissions
- Claude Code,GitHub 上的發布版本:https://github.com/anthropics/claude-code/releases
如需繼續使用模型,請前往 Ailoot。
更多詳情
常見問題:Claude Code 2.1.268:deny 規則與 MCP 修正了什麼
如何在不暴露真實機密的情況下測試 deny 規則?
建立只含無害文字的測試檔,禁止 Read 讀取該檔,重新啟動工作階段後請代理讀取。預期應拒絕並指出你的規則。可能失敗的測試絕不能拿真實 .env 檔執行。
一次成功拒絕,就證明全部權限都安全嗎?
不能;只驗證了該檔案與該存取路徑。先在 /permissions 檢查生效規則,再測試你依賴的其他路徑和情境;涉及符號連結時也要測試相應寫法。