&lt;?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Stan Wu 吳信典</title><link>https://blog.stanwu.org/tags/claude-code/</link><description>拆解被包裝過的東西、數位自主權實踐、非典型理財觀</description><language>zh-TW</language><lastBuildDate>Mon, 06 Apr 2026 02:06:10 +0800</lastBuildDate><atom:link href="https://blog.stanwu.org/tags/claude-code/feed.xml" rel="self" type="application/rss+xml"/><item><title>MCP 寫入 Cloudflare WAF 觸發詞避開</title><link>https://blog.stanwu.org/posts/mcp-cloudflare-waf/</link><pubDate>Wed, 25 Mar 2026 00:00:00 +0000</pubDate><guid>https://blog.stanwu.org/posts/mcp-cloudflare-waf/</guid><description>&lt;h2 id="問題"&gt;問題&lt;/h2&gt;
&lt;p&gt;透過 Claude Code CLI 使用雲端 MCP（Box、ClickUp、Notion、Confluence）寫入內容時，Cloudflare WAF 會將特定字串當作攻擊特徵，直接封鎖整個 POST 請求（回傳 Cloudflare 403 頁面）。&lt;/p&gt;
&lt;p&gt;讀取操作（GET）不受影響，只有寫入操作（POST with body）會被攔截。&lt;/p&gt;
&lt;h2 id="觸發字串與-waf-分類"&gt;觸發字串與 WAF 分類&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;原始字串&lt;/th&gt;
&lt;th&gt;WAF 判定類別&lt;/th&gt;
&lt;th&gt;替代寫法&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/etc/hosts&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;路徑穿越 (Path Traversal)&lt;/td&gt;
&lt;td&gt;「系統 hosts 檔案」&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;0.0.0.0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;IP 位址注入&lt;/td&gt;
&lt;td&gt;省略或用「loopback 位址」描述&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sudo bash&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;指令注入 (Command Injection)&lt;/td&gt;
&lt;td&gt;「以管理員權限執行腳本」&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;defaults write&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;系統指令注入&lt;/td&gt;
&lt;td&gt;「SoftwareUpdate 偏好設定」&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/var/db/diagnostics&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;路徑穿越&lt;/td&gt;
&lt;td&gt;「系統診斷目錄」&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/Library/LaunchDaemons/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;路徑穿越&lt;/td&gt;
&lt;td&gt;「系統級 Launch Daemon」&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="影響範圍"&gt;影響範圍&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;受影響&lt;/strong&gt;：Claude Code CLI → anthropic.com MCP proxy → 各平台 API（所有 &lt;code&gt;mcp__claude_ai_*&lt;/code&gt; 工具的寫入操作）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;不受影響&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;本地 MCP（如 Obsidian stdio 直連）— 不經過 Cloudflare&lt;/li&gt;
&lt;li&gt;Claude.ai web 版 — 走不同的請求路徑&lt;/li&gt;
&lt;li&gt;雲端 MCP 的讀取操作（GET 請求）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="實際案例"&gt;實際案例&lt;/h2&gt;
&lt;p&gt;2026-03-25 存 KB 筆記「macOS 15.7.5 封鎖 Tahoe 升級方案」時：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;五平台並行寫入，Obsidian 成功，其餘四個全部被 Cloudflare 封鎖&lt;/li&gt;
&lt;li&gt;重試多次、重新認證 MCP server 均無效&lt;/li&gt;
&lt;li&gt;排查後發現內容中包含 &lt;code&gt;/etc/hosts&lt;/code&gt;、&lt;code&gt;0.0.0.0&lt;/code&gt;、&lt;code&gt;sudo bash&lt;/code&gt;、&lt;code&gt;defaults write&lt;/code&gt; 等字串&lt;/li&gt;
&lt;li&gt;將敏感字串替換為描述性文字後，四個平台全部寫入成功&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="處理原則"&gt;處理原則&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Obsidian&lt;/strong&gt;（本地 stdio）：保留完整原始內容，不需替換&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;雲端平台&lt;/strong&gt;（Box、ClickUp、Notion、Confluence）：將觸發字串替換為描述性文字&lt;/li&gt;
&lt;li&gt;技術細節盡量用自然語言描述，避免直接貼命令列語法&lt;/li&gt;
&lt;li&gt;如果不確定是否會觸發，先寫 Obsidian，再用替代版寫雲端平台&lt;/li&gt;
&lt;/ol&gt;</description></item></channel></rss>