Claude Code in Action

Gotchas around Hooks:
資安邊界與協作悖論

在設定 Claude Code hooks 時,官方祭出了極度嚴格的資安規範,尤其是強制使用「絕對路徑」。這項政策雖然封死了路徑劫持攻擊,卻也直接摧毀了團隊間透過 Git 共享設定檔的可能性。

身為工程師,我們如何利用動態初始化腳本,優雅地解決這個架構衝突?

第一層解析:Hooks 資安護城河

在編寫給 LLM 或自動化工具調用的 Hooks 腳本時,任何模糊地帶都可能成為攻擊載體。官方點名了 5 大核心防禦機制。請操作下方的漏洞掃描器,觀察不安全的腳本如何被修補。

修補動作

hooks/pre-commit.sh 安全評分: 0%
# 處理輸入
USER_INPUT=$1
# 執行使用者傳入的指令
echo $USER_INPUT
# 讀取路徑配置
TARGET_DIR="../../config/"
# 執行子腳本 (易受 Path Interception 攻擊)
./scripts/format.sh
# 載入環境變數
source .env

💡 點擊左側規則,觀察腳本如何防禦常見的 Injection 與 Planting 攻擊。

第二層解析:絕對路徑帶來的「協作悖論」

為了滿足規則 4 的防禦機制,我們必須在 `.claude/settings.json` 中將 Hook 腳本寫死為絕對路徑。但這個「安全」的決定,在團隊協作中卻是災難。

A
Alice 的 Mac
✓ 執行成功
/Users/alice/dev/claude-hooks/script.sh
Git Repository
settings.json
"hook": "/Users/alice/dev..."
B
Bob 的 Linux
等待同步...
/home/bob/workspace/claude-hooks/

💡 對於不同開發者,專案存放路徑必然不同。絕對路徑無法被共用。

第三層解析:中介層與動態初始化

為了解決這個死結,架構引入了**動態配置生命週期**。我們不再直接將設定檔提交到 Git,而是提交包含 `$PWD` 變數的樣板 (`settings.example.json`),並透過 `npm run setup` 在本機端即時編譯。

選擇你的本機環境:
1. Git Repository
📄 settings.example.json
{
  "hooks": {
    "pre-commit": "$PWD/scripts/hook.js"
  }
}
2. Runtime Execution
npm run setup
> node scripts/init-claude.js
> replace('$PWD', currentDir)
3. Local Machine (Ignored)
📄 settings.local.json
{
  "hooks": {
    "pre-commit": "waiting_for_init.../scripts/hook.js"
  }
}

💡 透過這個機制,專案內會同時存在 `example.json` 與 `local.json`,完美兼顧資安絕對路徑與跨平台協作。