📖 Nội dung bài học
Tóm tắt
Hãy cùng xây dựng một hook tùy chỉnh để ngăn Claude đọc các file nhạy cảm như .env. Đây là một ví dụ thực tế về cách hook có thể bảo vệ các biến môi trường và dữ liệu bí mật khác của bạn trong các phiên phát triển.
Thiết lập cấu hình Hook
Đầu tiên, bạn cần cấu hình hook của mình trong file cài đặt. Mở file .claude/settings.local.json và tìm phần hooks. Bạn sẽ tạo một hook PreToolUse vì bạn muốn chặn các tool calls trước khi chúng thực thi.
Cấu hình yêu cầu hai phần chính:
- Matcher - chỉ định tool nào cần theo dõi
- Command - script chạy khi các tool đó được gọi
Đối với matcher, bạn muốn bắt cả các thao tác đọc và grep có thể truy cập file .env:
"matcher": "Read|Grep"
Ký hiệu pipe (|) hoạt động như một toán tử OR, vì vậy điều này sẽ kích hoạt trên cả hai tool. Đối với command, bạn sẽ trỏ đến một script Node.js:
"command": "node ./hooks/read_hook.js"
Hiểu dữ liệu Tool Call
Khi Claude cố gắng dùng một tool, hook của bạn nhận thông tin chi tiết về tool call đó thông qua standard input dưới dạng JSON. Dữ liệu này bao gồm:
- Session ID và đường dẫn transcript
- Tên sự kiện hook (PreToolUse trong trường hợp của bạn)
- Tên tool (Read, Grep, v.v.)
- Các tham số input của tool, bao gồm đường dẫn file
Script hook của bạn xử lý dữ liệu này và có thể cho phép thao tác tiếp tục hoặc chặn nó bằng cách thoát với một code cụ thể.
Triển khai Script Hook
Script hook cần đọc dữ liệu tool call từ standard input và kiểm tra xem Claude có đang cố gắng truy cập file .env hay không. Đây là logic cốt lõi:
async function main() {
const chunks = [];
for await (const chunk of process.stdin) {
chunks.push(chunk);
}
const toolArgs = JSON.parse(Buffer.concat(chunks).toString());
// Trích xuất đường dẫn file mà Claude đang cố gắng đọc
const readPath =
toolArgs.tool_input?.file_path || toolArgs.tool_input?.path || "";
// Kiểm tra xem Claude có đang cố gắng đọc file .env không
if (readPath.includes('.env')) {
console.error("Bạn không thể đọc file .env");
process.exit(2);
}
}
Script kiểm tra .env trong đường dẫn file và chặn thao tác nếu tìm thấy. Khi bạn thoát với code 2, Claude nhận được một thông báo lỗi và hiểu rằng thao tác đã bị chặn bởi một hook.
Kiểm tra Hook của bạn
Sau khi lưu cấu hình và script hook, khởi động lại Claude Code để các thay đổi có hiệu lực. Sau đó, hãy kiểm tra nó bằng cách yêu cầu Claude đọc file .env của bạn.
Khi Claude cố gắng thực hiện thao tác đọc, hook của bạn sẽ chặn nó và trả về một thông báo lỗi. Claude sẽ nhận ra rằng thao tác đã bị chặn và giải thích điều này với bạn, thường đề cập rằng một read hook đã ngăn chặn quyền truy cập vào file.
Sự bảo vệ tương tự hoạt động cho các thao tác grep - nếu Claude cố gắng tìm kiếm bên trong file .env, hook cũng sẽ chặn thao tác đó.
Lợi ích chính
Cách tiếp cận này cung cấp một số lợi thế:
- Bảo vệ chủ động - chặn quyền truy cập trước khi đọc dữ liệu nhạy cảm
- Hoạt động minh bạch - Claude hiểu tại sao thao tác thất bại
- Kết hợp linh hoạt - hoạt động với nhiều tool (read, grep, v.v.)
- Phản hồi rõ ràng - cung cấp các thông báo lỗi có ý nghĩa
Mặc dù ví dụ cụ thể này tập trung vào các file .env, nhưng cùng một pattern có thể bảo vệ bất kỳ file hoặc thư mục nhạy cảm nào trong project của bạn. Bạn có thể mở rộng logic để kiểm tra nhiều pattern file hoặc triển khai các kiểm soát truy cập phức tạp hơn dựa trên các yêu cầu bảo mật của bạn.
🔁 Bài học liên quan
- Bài tiếp: Gotchas around hooks
- Bài trước: Defining hooks
- Cùng section: Adding context · Making changes · Course satisfaction survey
- Thuộc lộ trình: Path C
- Docs tham khảo: Glossary · Skills atlas · By use-case
📚 Nguồn & ghi nhận
- Bài học gốc Anthropic Academy: https://anthropic.skilljar.com/claude-code-in-action/312003
- © 2025 Anthropic. Chỉ dùng cho mục đích giáo dục, fair-use.
- Crawl: 2026-04-23 · Chuẩn hoá: 2026-05-01