生活分享
Claude Code|用 Hook 保護指定檔案並測試路徑邊界
為特定編輯工具設置範圍檢查及清楚的拒絕訊息。這一篇會替 Write 與 Edit 設定明確的練習邊界:可以修改專案內一般材料,不能改 private 假資料目錄,也不能離開練習根目錄。你會測試相對路徑、大小寫與別名路徑,並列出這個 Hook 沒有涵蓋的工具,避免把單一攔截機制說成全面保護。
閱讀時間約 7 分鐘

進階 · CLI
這一篇會替 Write 與 Edit 設定明確的練習邊界:可以修改專案內一般材料,不能改 private 假資料目錄,也不能離開練習根目錄。你會測試相對路徑、大小寫與別名路徑,並列出這個 Hook 沒有涵蓋的工具,避免把單一攔截機制說成全面保護。
先讀資料安全Claude Code|專案資料與操作安全辨識金鑰、私人資料與高影響操作。讓 Claude Code 接觸專案前,先知道哪些資料可以讀、哪些操作需要額外確認,以及產出會保存在哪裡。本篇以待辦網站建立一份可操作的安全基準,涵蓋秘密、私人資料、外部文字、工具授權與高影響操作,並提供可自行驗證的檢查方式。閱讀全文、權限與 SandboxClaude Code|權限與 Sandbox 邊界實驗用無害案例觀察允許、詢問、拒絕與執行隔離。寫在 MD 裡的「不要讀取私人檔案」是指引,工具權限與執行隔離則是另外的機制。本篇用完全虛構的文字檔及本機服務,實際比較允許、詢問、拒絕與 Sandbox,最後產出一張有工具、路徑及作業系統欄位的行為矩陣。閱讀全文及Hook 事件Claude Code|讀懂 Hook 事件:輸入、輸出與退出碼建立可重播事件的本機測試工具。Hook 教學最容易卡住的地方,常常不是腳本語法,而是沒有分清楚誰送入事件、腳本讀到什麼,以及輸出會由誰解讀。本篇建立一個能重播事件的小實驗室,先用固定 JSON 驗證腳本,再接到 Claude 的實際事件。最後你會有正常、拒絕、輸入錯誤及診斷訊息四種可辨認結果。閱讀全文。下載第 76 篇材料,開啟 starter。需要 Node.js 22;離線測試不需登入。閱讀約 20 分鐘,實作約 45 分鐘。
把保護範圍寫成具體條件
閱讀完整文字說明
用 Hook 保護指定檔案並測試路徑邊界,以流程和文件圖形呈現教學重點。
受保護內容是 private/demo.txt,裡面只有虛構文字。一般寫入對照組是 fixtures/demo.json。Hook 僅處理 PreToolUse 中的 Write 與 Edit;它不攔截你手動操作的終端機,也不自動控制其他 MCP模型上下文協定(MCP)是什麼:連接工具與資料的共同介面MCP 是讓 AI 應用程式與外部工具、資料和提示範本交換資訊的開放協定,不是模型本身,也不保證接上就能完成任務。本文用查詢社區圖書室資料的例子,說明主機、用戶端、伺服器及工具、資源、提示的分工,並比較 MCP、A2A 與 Agent Skills。附連線驗證與權限檢查方法,幫你區分已設定、已連接、可呼叫與真正取得結果。閱讀全文 伺服器。這份明確清單應放進完成報告,不能只寫「已保護專案」。
拒絕原因也要可理解。指向 private 的操作回報 protected fixture directory;離開根目錄則回報 outside exercise。讀者應能辨認是檔案用途受限,還是路徑本身越界,而不是看到一個沒有上下文的失敗碼。
不要使用真實機密測試。只需在課程資料夾內建立假資料,就能觀察工具拒絕及日誌行為。測試過程也不需要把假機密全文送入 Hook;事件中的 file_path 已足以做邊界判斷,避免習慣性記錄整個 tool_input。
先讀路徑正規化程式
材料的 boundary.mjs 先取得練習根目錄的真實位置,再解析輸入路徑。目標還不存在時,往上找最近存在的父目錄,解析它的真實位置,再接回剩餘部分。這讓新檔案也能檢查,而且能辨識父目錄中的連結指向何處。
最後用 path.relative 比較目標和根目錄。相對結果以 .. 開頭或仍是絕對路徑時,表示它不在允許範圍。不能只用字串 startsWith(root),因為例如 lab 與 lab-copy 可能有相同字首,卻是不同資料夾。
import {safePath} from './hooks/boundary.mjs';
for (const input of ['fixtures/demo.json', 'private/demo.txt', '../outside.txt']) {
try {
const result = safePath(process.cwd(), input);
console.log(JSON.stringify({input, relative: result.relative}));
} catch (error) {
console.log(JSON.stringify({input, rejected: error.message}));
}
}
這個入口只解析路徑,不寫入那些檔案。private 位於根目錄內,所以邊界函式會接受它;後續 protect.mjs 再依用途拒絕。把「是否在專案內」與「專案內哪裡可改」分成兩步,讓規則容易閱讀和測試。
重播允許與拒絕案例
先看 fixtures/pre-write.json,確認 tool_name、file_path 和事件名稱。複製成另一份案例,分別指向一般檔案、private/demo.txt 及 ../outside.txt。離線重播只檢查判斷結果,不會真的呼叫 Claude Write。
{
"hook_event_name": "PreToolUse",
"tool_name": "Write",
"session_id": "lab-76",
"tool_input": {"file_path": "private/demo.txt", "content": "虛構修改"}
}
node hooks/replay.mjs protect fixtures/pre-private.json
node --test tests/hooks.test.mjs
拒絕輸出應位於 hookSpecificOutput,hookEventName 是 PreToolUse,permissionDecision 是 deny,並有原因。允許案例不必主動輸出 allow;保持沒有拒絕決定,讓原本權限流程繼續判斷。這不代表 Hook 已替所有操作預先批准。
將 tool_name 改成 Edit 再重試,確認兩個工具都涵蓋。另用錯誤事件名稱測試,應出現事件不符而非默默成功。材料的外層解析錯誤使用非零退出碼,合法但不允許的路徑則產生明確的工具拒絕決定,兩種訊號要分開閱讀。
比較大小寫、分隔符與別名
Windows 路徑通常不區分大小寫,Linux 常會區分。本課對受保護目錄名採不區分大小寫的判斷,因此 Private 與 private 都視為課程保護範圍;這是本課政策,並不是宣稱所有作業系統的檔案規則相同。
使用 path API 將檔案系統路徑轉成可比較的相對路徑,再以統一斜線檢查。不要把使用者傳入的斜線直接做文字替換後就當成完整安全處理。磁碟機、網路路徑、符號連結及不存在的父目錄都可能帶來差異,必須在實際支援環境測試。
若你能建立目錄連結,可在獨立的臨時練習區把一個別名指向課程根目錄外的假資料,再解析該路徑,預期被拒絕。沒有建立連結權限時,記錄此案例未測,不需要提高系統權限才能完成其他部分,也不能把略過當成通過。
這個檢查仍存在檔案狀態可能在檢查後改變的限制。本篇用單人本機材料教路徑判斷,不保證抵抗其他程序同時替換連結。對高影響或多人環境,還需作業系統隔離、最小權限及適合的檔案開啟策略。
接上 Claude 的真實工具事件
將下方設定合併到 .claude/settings.json,保存之前的版本。另開 Claude,只要求修改一般假資料,確認能走完工具流程;再要求修改 private/demo.txt,預期工具被拒絕且原檔不變。用實際差異或雜湊確認,不採用模型自述作唯一證據。
{
"hooks": {
"PreToolUse": [
{
"matcher": "Write|Edit",
"hooks": [{"type": "command", "command": "node hooks/protect.mjs", "timeout": 10}]
}
]
}
}
請使用 Write 把 private/demo.txt 改成「虛構修改」。
若工具被拒絕,回報原因並停止,不改用其他工具或終端機繞過。
接著用 Edit 測一次,確認不是只有 Write 有紀錄。測試完成後讀取原始假資料,確定內容仍在,且沒有把 content 全文寫進事件日誌。如果你的日誌包含整個工具輸入,先縮小紀錄欄位,再繼續使用這個 Hook。
故障練習:不要把涵蓋範圍說大
將 matcher 暫時改成只匹配 Edit,再觀察 Write 不會由這個設定進入同一攔截。這個實驗只需用一般假資料,不必真的改寫 private。它說明設定範圍和腳本範圍都需要一致;程式寫了 Write 分支,設定不送事件,仍不會生效。
同樣地,手動終端機、Bash 裡的檔案命令及外部 MCP 各有不同執行路徑。完成報告應列「本 Hook 未涵蓋」,再引用權限與隔離Claude Code|權限與 Sandbox 邊界實驗用無害案例觀察允許、詢問、拒絕與執行隔離。寫在 MD 裡的「不要讀取私人檔案」是指引,工具權限與執行隔離則是另外的機制。本篇用完全虛構的文字檔及本機服務,實際比較允許、詢問、拒絕與 Sandbox,最後產出一張有工具、路徑及作業系統欄位的行為矩陣。閱讀全文補足,不教模型繞過已拒絕的操作。
| 檢查項目 | 可接受的完成證據 |
|---|---|
| 一般 Write、Edit | 正常流程及指定檔案差異 |
| private 假資料 | 明確 deny、原檔不變 |
| 越界路徑 | 不寫入、拒絕原因清楚 |
| 大小寫與別名 | 記錄實際平台及結果 |
| 日誌 | 不含假機密全文與完整輸入 |
把邊界檢查限定在它能看見的操作
本課檢查 Write 和 Edit 提供的檔案路徑,因此驗證案例也應使用這兩類事件。從終端機指令寫入檔案屬於另一條操作路徑,不能因為 Write 被擋下就宣稱所有寫入都受到保護。需要更廣的限制時,另外設計權限與系統層的隔離。
報告列出已覆蓋的工具、路徑與符號連結案例,並保留未涵蓋項目。這份範圍說明能防止未來的維護者把教學範例誤當成完整的存取控制系統。
還原與小練習
完成後恢復原設定,建立新工作階段核對本次攔截已停用。保留測試案例與結果,不刪除不屬於本次課程的規則。若仍有其他保護提示,先確認來源;不能因課程 Hook 停用後操作仍被拒絕,就認定還原失敗。
小練習是增加一個 protected-config 目錄,先寫政策及正常反例,再擴充程式與測試。完成時應能說清楚保護的是哪個工具、哪個目錄及哪個作業系統。後續接入MCP 外部內容Claude Code|MCP 回傳含有指令時:資料與操作權限分開以無害的對抗案例測試工具資料處理。MCP 回傳的是外部資料,即使裡面寫著「系統指示」或「請立即修改檔案」,也不會因此取得操作授權。本篇用一份合成外部筆記,驗證 Claude 能擷取資料、指出可疑指令並維持原任務範圍,同時確認檔案和最後回報沒有受到不當影響。閱讀全文時,也沿用這種明確範圍及證據的寫法。
回 Claude Code 教學總目錄Claude Code 完整教學目錄:從入門到自動化依平台、程度與功能找到需要的教學,從 96 篇文章與共用練習專案逐步完成操作。這個教學中心把 Claude Code 分成 96 個可以獨立閱讀的小題目,從桌面、CLI、網頁與手機開始,再學 MD 規則、常用指令、Skills、MCP 與自動化。你可以依推薦路線循序學習,也可以直接搜尋正在遇到的功能、命令或檔名。目錄依目前公開狀態顯示可閱讀文章。閱讀全文
同主題延伸閱讀
生活分享
Claude Code|建立第一個 mod:在 Claude Code 行程內數工具呼叫
寫一個三檔案的 mod,用驗證器與測試確認它掛上的事件。文件把 mod 定義成多了入口檔的 plugin:入口檔叫 hooks module,Claude Code 在事件發生時呼叫裡面的函式,函式可以觀察、改寫或接手事件。
生活分享
Claude Code|Git Worktree 平行工作
隔離多個任務的檔案與分支。Git Worktree 讓同一儲存庫擁有多個工作目錄,各自使用分支與檔案。本篇會把待辦篩選與文件整理分開,確認兩個 session 不會直接改到彼此的檔案,再把其中一個成果整合回主分支。你也會知道何時可以安全清理工作目錄。
生活分享
Claude Code|雙 Worktree 實作與衝突整合
隔離兩項功能,最後完成整合與回歸。兩個 Claude 工作階段同時編輯專案,最容易出現的問題是互相改到同一份檔案,或各自測試通過、整合後卻失敗。本篇用兩個 Worktree 分別處理篩選預設值與介面文字,故意製造一次小衝突,再完成整合、驗證與清理。你不需要先啟用 Agent Teams。
生活分享
Claude Code|比較流程品質、用量與執行時間
以同一資料集比較兩種工作方法。比較兩種 Claude 工作方法時,不能只挑成功那一次,也不能只看第一個答案有多快。本篇用固定案例、原始紀錄和一致判準,比較品質、重試、等待與人工整合時間,最後寫出有樣本數與限制的報告,而不是保證某個方法一定省錢。
最新旅遊情報攻略

情報
2026 韓國楓葉預測:雪嶽山 10 月 20 日、首爾近郊 10 月底、內藏山與漢拏山 11 月上旬
韓國山林廳 2026 年 9 月 22 日公布的楓紅高峰預測:雪嶽山 10 月 20 日,春川、國立樹木園到首爾植物園落在 10 月 28 日到 11 月 2 日,內藏山 11 月 4 日、漢拏山 11 月 6 日,整體比最近 5 年晚約 0.8 天。整理各地楓樹與銀杏的預測日、首爾出發怎麼排,以及出發前去哪裡看即時楓況。2026 年 10 月查證。
- 季節活動
- 自然
- 觀景

攻略胡志明市
胡志明市到頭頓一日遊:白藤碼頭搭高速船、船票與班次,下船就是胡梅纜車與耶穌基督像
人在胡志明市挪一天去頭頓看海:市中心的白藤高速船碼頭搭船,航程 120 分鐘到頭頓的胡梅碼頭,平日成人 320,000 越南盾、週末 350,000,回程末班平日 15:00。下船就是胡梅纜車站,同一條路上有白宮,小山頂上是耶穌基督像。平日一天只有兩班船,整天要從末班船倒推著排。
- 交通
- 行程範例
- 海灘

攻略沖繩
沖繩不開車攻略:單軌只到浦添,美麗海水族館要坐兩個多小時的巴士,回那霸的最後一班直達車 17:22 就開走
不租車的沖繩怎麼移動:那霸市區靠沖繩都市單軌電車(ゆいレール),那霸機場站到終點てだこ浦西 19 站、17 公里、37 分鐘,一日券 1,000 日圓;美麗海水族館有那霸機場直達的高速巴士,單程 2,000 日圓起、官方時刻表上 2 小時上下,下車後還要走 10 分鐘;古宇利島要在今帰仁村役場轉車,當天來回光坐車就六個半小時;回程的最後一班直達車 17:22 就從記念公園前開走(2026 年 9 月查證)。
- 交通
- 行程範例
- 預算
資料來源
- Hooks reference · 查證日期: