問題

透過 Claude Code CLI 使用雲端 MCP(Box、ClickUp、Notion、Confluence)寫入內容時,Cloudflare WAF 會將特定字串當作攻擊特徵,直接封鎖整個 POST 請求(回傳 Cloudflare 403 頁面)。

讀取操作(GET)不受影響,只有寫入操作(POST with body)會被攔截。

觸發字串與 WAF 分類

原始字串WAF 判定類別替代寫法
/etc/hosts路徑穿越 (Path Traversal)「系統 hosts 檔案」
0.0.0.0IP 位址注入省略或用「loopback 位址」描述
sudo bash指令注入 (Command Injection)「以管理員權限執行腳本」
defaults write系統指令注入「SoftwareUpdate 偏好設定」
/var/db/diagnostics路徑穿越「系統診斷目錄」
/Library/LaunchDaemons/路徑穿越「系統級 Launch Daemon」

影響範圍

  • 受影響:Claude Code CLI → anthropic.com MCP proxy → 各平台 API(所有 mcp__claude_ai_* 工具的寫入操作)
  • 不受影響
    • 本地 MCP(如 Obsidian stdio 直連)— 不經過 Cloudflare
    • Claude.ai web 版 — 走不同的請求路徑
    • 雲端 MCP 的讀取操作(GET 請求)

實際案例

2026-03-25 存 KB 筆記「macOS 15.7.5 封鎖 Tahoe 升級方案」時:

  1. 五平台並行寫入,Obsidian 成功,其餘四個全部被 Cloudflare 封鎖
  2. 重試多次、重新認證 MCP server 均無效
  3. 排查後發現內容中包含 /etc/hosts0.0.0.0sudo bashdefaults write 等字串
  4. 將敏感字串替換為描述性文字後,四個平台全部寫入成功

處理原則

  1. Obsidian(本地 stdio):保留完整原始內容,不需替換
  2. 雲端平台(Box、ClickUp、Notion、Confluence):將觸發字串替換為描述性文字
  3. 技術細節盡量用自然語言描述,避免直接貼命令列語法
  4. 如果不確定是否會觸發,先寫 Obsidian,再用替代版寫雲端平台