部落格
遠端 AI 程式開發安全最佳實踐
當 AI 智慧代理擁有程式碼庫的寫入權限,而你透過網路控制它時,安全決策至關重要。以下是做出正確決策的方法。
繼續查看該欄目下的產品與工程更新。
瀏覽此分類遠端執行 AI 程式開發智慧代理會引入桌面使用時不存在的安全考量。智慧代理可以存取你的程式碼庫、執行命令、修改檔案。手機到 Mac 之間的網路路徑可能跨越不受信任的區域。
這不是避免遠端 AI 程式開發的理由,而是理解威脅模型並做出明智決策的理由。大多數風險都可以透過簡單直接的實踐來管理。
威脅模型
在深入了解緩解措施之前,先明確你要保護什麼:
資產:
- 你的原始碼(智慧財產權、設定檔中的金鑰)
- 你的開發環境(執行命令的能力)
- Mac 上的 git 憑證和 SSH 金鑰
- 你的程式碼使用的服務 API Key
威脅來源:
- 掃描網際網路尋找暴露服務的機會主義攻擊者
- 共享 WiFi 上的網路竊聽者
- 撿到或偷走你手機的人
- 你使用的工具的供應鏈攻擊
攻擊面:
- 手機與 Mac 之間的網路連線
- 認證機制
- AI 智慧代理在檔案系統上的權限
- Mac 上執行的伺服器程序
第 1 層:網路安全
使用加密連線
區域網路模式(ws://): 流量未加密。在你的家庭 WiFi 上這是可以接受的,因為流量不會離開本地網路。在共享或公共網路上則不可接受。
Cloudflare Tunnel(wss://): 流量使用 TLS 加密。任何跨越網際網路的連線都應使用此方式。隧道在你的手機和 Cloudflare 邊緣之間加密,也在 Cloudflare 和你的 Mac 之間加密。
經驗法則: 如果你在自己控制的網路上(家庭、辦公室),區域網路模式就夠了。其他任何地方,使用 Cloudflare Tunnel。
不要暴露原始連接埠
永遠不要在路由器上將連接埠 8765(或任何連接埠)轉發到你的 Mac 來進行 Tactic Remote 存取。這會將你的伺服器直接暴露在網際網路上,沒有任何中間保護。
Cloudflare Tunnel 完全避免了這個問題——Mac 主動向 Cloudflare 發起出站連線,無需入站連接埠。
Mac 應用程式包含防火牆偵測功能,會警告你防火牆設定問題。保持 Mac 防火牆啟用並開啟隱身模式。
第 2 層:認證
API Key 設定
Tactic Remote 使用 API Key 認證 WebSocket 連線:
- 區域網路連線: API Key 可選。你的本地網路充當信任邊界。
- Cloudflare Tunnel 連線: API Key 必須設定。伺服器會拒絕未認證的連線。
API Key 在 WebSocket 交握期間透過 Sec-WebSocket-Protocol 標頭傳輸。在 wss:// 下,此過程是加密的。
API Key 最佳實踐
- 使用產生的金鑰。 Mac 應用程式會產生一個 32 字元的隨機金鑰。這比你手動選擇的任何密碼都更強。
- 安全傳輸。 使用 QR 碼功能將金鑰當面傳輸到你的 iPhone。不要透過電子郵件、Slack 或簡訊發送。
- 定期輪換。 如果你懷疑金鑰可能已洩露,在 Mac 應用程式中產生新金鑰並更新你的 iPhone。
- 不要重複使用。 不要將 Tactic Remote 的 API Key 用於其他服務。它是單一用途的憑證。
速率限制
伺服器包含速率限制中介軟體,會減慢重複的認證失敗嘗試。這可以防止對 API Key 的暴力破解攻擊。使用 32 字元的隨機金鑰,暴力破解在運算上是不可行的,但速率限制增加了縱深防禦。
第 3 層:存取控制
路徑限制
Tactic Remote 支援 CLAUDE_REMOTE_ALLOWED_PATH 環境變數,用於限制 Claude Code 可以存取的目錄。將其設定為你的程式碼目錄:
如果不設定,Claude Code 可以存取你的整個主目錄(其預設行為)。路徑限制可以在出現問題時縮小影響範圍。
Claude Code 權限
Claude Code 本身有權限系統。Tactic Remote 中有兩種模式可用:
- 標準模式:
claude—— Claude Code 在執行危險操作前會請求審批(檔案刪除、執行不熟悉的命令) - 跳過權限模式:
claude --dangerously-skip-permissions—— Claude Code 無需詢問直接執行。更快,但沒有安全網。
遠端使用建議: 始終使用標準模式。審批提示在遠端使用時尤其有價值,因為你可以從手機上查看建議的操作並點擊 Y/N。跳過權限意味著 Claude 可以在你不知情的情況下做任何事——在你不在旁邊時很危險。
伺服端驗證
Tactic Remote 伺服器會驗證所有傳入的命令。lib/validators.js 模組檢查:
- 命令格式正確性
- 路徑穿越嘗試
- 輸入長度限制
lib/execSafe.js 模組用安全檢查包裝命令執行。這些不能替代 Claude Code 自身的權限系統,但在伺服器層面增加了一道防禦。
第 4 層:實體和裝置安全
Mac 安全
你的 Mac 是執行引擎。如果有人取得實體存取權限:
- 他們可以存取你所有的程式碼
- 他們可以直接控制 Claude Code
- 他們可以從 Mac 應用程式中讀取 API Key
緩解措施:
- 啟用 FileVault(全磁碟加密)
- 使用強登入密碼
- 啟用自動鎖定螢幕(5 分鐘或更短)
- 如果在離開 Mac 時執行伺服器,確保 Mac 位於實體安全的位置
iPhone 安全
你的 iPhone 是控制介面。如果有人存取了你解鎖的手機:
- 他們可以透過 Tactic Remote 向你的 Mac 發送命令
- 他們可以讀取你的連線設定,包括 API Key
緩解措施:
- 啟用 Face ID 或強密碼
- 保持 iOS 更新
- 不要將手機解鎖後放在無人看管的地方
第 5 層:操作安全
提示中不要包含什麼
從手機向 Claude Code 發送指令時,請記住你的提示會成為對話上下文的一部分。不要包含:
- 提示中的密碼或 API Key(「使用 API Key abc123 來...」)
- 資料庫憑證
- 使用者或客戶的個人資訊
改為透過環境變數名稱引用金鑰:「使用 STRIPE_SECRET_KEY 環境變數中的 API Key。」
審批前先審查
當 Claude Code 請求審批(Y/N 提示)時,在點擊 Y 之前先閱讀它想要做什麼。這在遠端使用時尤為重要,因為你可能正在分心。常見的審批請求:
- 檔案刪除
- 執行 shell 命令
- 安裝套件
- 修改設定檔
快速審查只需幾秒鐘,就能防止意外操作。
監控事件日誌
Mac 應用程式維護著所有 hook 事件的事件日誌。定期查看它,確認只有你的工作階段和命令出現在日誌中。意外的活動可能表示未授權的存取。
威脅情境與回應
情境:手機遺失或被竊
風險: 攻擊者使用你儲存的連線設定存取 Tactic Remote。
回應:
- 從你的 Mac 上立即產生新的 API Key(這會使舊金鑰失效)
- 可選擇停止伺服器,直到情況解決
- 如果無法找回手機,遠端清除手機
情境:API Key 洩露
風險: 有人取得了你的隧道 URL 和 API Key。
回應:
- 在 Mac 應用程式中產生新的 API Key
- 如果隧道 URL 也暴露了,重新啟動 cloudflared(它會取得一個新的隨機 URL)
- 檢查事件日誌中是否有未授權的工作階段活動
- 查看最近的 git 歷史是否有意外的提交
情境:不受信任的 WiFi 網路
風險: 網路竊聽、中間人攻擊。
回應: 這在設計上已被處理。Cloudflare Tunnel 使用 TLS,因此流量是加密的。即使在被攻破的網路上,攻擊者看到的也是加密的 WebSocket 框架,而不是你的終端內容。
情境:Claude Code 進行了意外修改
風險: AI 智慧代理修改了你沒有預期的內容。
回應:
- 從手機上使用
Ctrl+C中斷 Claude - 查看變更:在工作階段中執行
git diff - 如需回復:
git checkout .或git reset - 這就是 git 版本控制存在的意義——它是你的安全網
安全檢查清單
出發遠端工作前:
- Cloudflare Tunnel 已啟用(用於網際網路存取)
- API Key 已設定(32+ 字元隨機字串)
- API Key 透過 QR 碼傳輸(不透過網際網路)
- Mac 防火牆已啟用
- Mac FileVault 已啟用
- Mac 已設定自動鎖定螢幕
- iPhone 密碼/Face ID 已啟用
- Claude Code 執行在標準模式(非
--dangerously-skip-permissions) -
CLAUDE_REMOTE_ALLOWED_PATH已設定以限制檔案系統存取 - 開始工作前有近期的 git commit 作為復原點