Thiết lập .env giúp ngăn chặn Claude Code làm lộ thông tin bảo mật của bạn (Bao gồm cấu hình đầy đủ)

Thiết lập .env giúp ngăn chặn Claude Code làm lộ thông tin bảo mật của bạn (Bao gồm cấu hình đầy đủ)

@zodchiii
TIẾNG ANH2 tuần trước · 30 thg 4, 2026

AI features

1.7M
1.3K
149
30
5.9K

TL;DR

Tìm hiểu cách bảo mật Claude Code bằng cách định cấu hình các quy tắc từ chối trong settings.json, sử dụng môi trường thử nghiệm giả lập và triển khai các pre-commit hook để ngăn chặn việc rò rỉ thông tin xác thực nhạy cảm.

Claude Code đọc file .env của bạn ngay khi mở dự án.

Các API key, mật khẩu cơ sở dữ liệu, token Stripe, mọi thứ trong file .env đều được nạp vào bộ nhớ và có thể xuất hiện trong nhật ký hội thoại gửi đến máy chủ của Anthropic.

Thứ duy nhất thực sự chặn quyền truy cập là một dòng trong settings.json, mà hầu hết mọi người không có và cũng không biết đến.

Đây là cấu hình bảo mật đầy đủ 👇

Trước khi đi sâu, tôi chia sẻ ghi chú hàng ngày về AI & vibe coding trong kênh Telegram của mình: **https://t.me/zodchixquant**🧠

darkzodchi on X — cover

Tại sao quy tắc CLAUDE.md không bảo vệ bạn

Hầu hết mọi người thêm "không bao giờ đọc file .env" vào CLAUDE.md và cho rằng mình an toàn (thực tế không phải vậy)

CLAUDE.md chỉ là một gợi ý. Claude thường tuân theo nó, nhưng khi chịu áp lực (tác vụ phức tạp, ngữ cảnh dài, hướng dẫn mơ hồ), nó có thể và thực sự bỏ qua các quy tắc khuyến nghị.

Một issue trên GitHub từ tháng 4 năm 2026 đã xác nhận: Claude đọc và đưa nội dung .env vào cuộc hội thoại ngay cả khi CLAUDE.md cấm rõ ràng.

Biện pháp bảo vệ đáng tin cậy duy nhất là một quy tắc từ chối (deny rule) trong settings.json. Quy tắc từ chối được thực thi ở cấp hệ thống trước khi Claude nhìn thấy file.

Sự khác biệt giữa "làm ơn đừng đọc cái này" và "bạn không thể đọc cái này".

darkzodchi - inline image

3 cách bí mật của bạn bị rò rỉ

Không chỉ đơn giản là Claude đọc trực tiếp file .env. Có ba con đường:

1. Đọc file trực tiếp. Claude quét dự án của bạn, mở .env và nội dung trở thành một phần của ngữ cảnh hội thoại. Đây là con đường rõ ràng nhất và dễ chặn nhất bằng quy tắc từ chối.

2. Thu thập đầu ra runtime. Claude chạy test hoặc khởi động ứng dụng của bạn. Một yêu cầu HTTP thất bại ghi lại toàn bộ header Authorization: Bearer sk-live-abc123.... Một timeout cơ sở dữ liệu dump chuỗi kết nối kèm mật khẩu. Claude thu thập tất cả đầu ra lệnh. Bí mật của bạn giờ đây nằm trong cuộc hội thoại, dù Claude chưa bao giờ mở .env.

3. Công cụ grep và tìm kiếm. Claude dùng grep để tìm kiếm tên hàm trong codebase. Kết quả tìm kiếm chạm vào file cấu hình chứa thông tin đăng nhập. Đầu ra grep bao gồm các dòng khớp với bí mật của bạn hiển thị rõ ràng.

Hầu hết mọi người chỉ bảo vệ con đường 1. Con đường 2 và 3 mới là nơi thiệt hại thực sự xảy ra.

Các quy tắc từ chối thực sự hiệu quả

Thêm những dòng này vào ~/.claude/settings.json để bảo vệ toàn cục cho mọi dự án:

json

json
1{
2 "permissions": {
3 "deny": [
4 "Read(**/.env*)",
5 "Read(**/.dev.vars*)",
6 "Read(**/*.pem)",
7 "Read(**/*.key)",
8 "Read(**/secrets/**)",
9 "Read(**/credentials/**)",
10 "Read(**/.aws/**)",
11 "Read(**/.ssh/**)",
12 "Read(**/config/database.yml)",
13 "Read(**/config/credentials.json)",
14 "Read(**/.npmrc)",
15 "Read(**/.pypirc)",
16 "Write(**/.env*)",
17 "Write(**/secrets/**)",
18 "Write(**/.ssh/**)"
19 ]
20 }
21}

Điều này chặn Claude đọc hoặc ghi bất kỳ file .env nào, khóa PEM, khóa SSH, cấu hình AWS, file thông tin đăng nhập và token npm/PyPI. Wildcard \\ có nghĩa là nó áp dụng cho mọi thư mục con trong dự án của bạn.

Chặn rò rỉ runtime

Quy tắc từ chối ngăn đọc file trực tiếp nhưng không ngăn đầu ra runtime. Để giải quyết, hãy dùng file .env riêng cho test với giá trị giả:

text
1# .env.test — an toàn để đọc, an toàn để rò rỉ
2STRIPE_SECRET_KEY=sk_test_not_a_real_key
3DATABASE_URL=postgres://test:test@localhost:5432/testdb
4OPENAI_API_KEY=sk-test-dummy-key-for-mocking
5AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
6AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

Trỏ test framework của bạn vào .env.test thay vì .env. Giờ khi Claude chạy test và thu thập đầu ra, các key hiển thị chỉ là giả.

Pre-commit hook bắt tất cả

Ngay cả với quy tắc từ chối, sai lầm vẫn có thể xảy ra. Thêm một git pre-commit hook quét tìm bí mật trước khi bất kỳ commit nào đến repo của bạn:

bash

bash
1#!/bin/bash
2# .git/hooks/pre-commit — chặn commit chứa bí mật
3
4PATTERNS=(
5 'sk-ant-' # Anthropic API keys
6 'sk-live-' # Stripe live keys
7 'sk_live_' # Stripe live keys (alt format)
8 'ghp_' # GitHub personal tokens
9 'gho_' # GitHub OAuth tokens
10 'AKIA' # AWS access keys
11 'xox[bpors]-' # Slack tokens
12 'SG\.' # SendGrid keys
13 'eyJ' # JWTs
14 'BEGIN.*PRIVATE KEY' # Private key material
15)
16
17BLOCKED_FILES=('.env' 'credentials.json' 'id_rsa' '*.pem' '*.key')
18
19for pattern in "${PATTERNS[@]}"; do
20 if git diff --cached --diff-filter=ACM | grep -qE "$pattern"; then
21 echo "BLOCKED: Found potential secret matching '$pattern'"
22 echo "Remove the secret and try again."
23 exit 1
24 fi
25done
26
27for file in "${BLOCKED_FILES[@]}"; do
28 if git diff --cached --name-only | grep -q "$file"; then
29 echo "BLOCKED: Attempted to commit sensitive file: $file"
30 exit 1
31 fi
32done
33
34echo "Pre-commit security check passed."
35exit 0

Làm cho nó có thể thực thi: chmod +x .git/hooks/pre-commit

Điều này bắt các API key Anthropic, key Stripe, token GitHub, key AWS, token Slack, key SendGrid, JWT và khóa riêng tư. Nếu bất kỳ thứ nào trong số này xuất hiện trong file đã staged, commit sẽ bị chặn.

Cô lập container (phương án triệt để)

Để bảo mật tối đa, hãy chạy Claude Code bên trong container nơi file .env thực sự không tồn tại:

bash

bash
1# Mount /dev/null lên .env để Claude không thể thấy nó
2docker run -v /dev/null:/app/.env:ro your-dev-container

Từ góc nhìn của Claude, .env là một file rỗng. Bí mật của bạn không bao giờ vào hệ thống file container. Đây là hơi quá mức cho hầu hết dự án, nhưng rất cần thiết cho công việc với khách hàng có thông tin đăng nhập production.

Cấu hình bảo mật đầy đủ (sẵn sàng copy-paste)

Hoàn chỉnh ~/.claude/settings.json với tất cả biện pháp bảo vệ bảo mật:

json

json
1{
2 "permissions": {
3 "allow": [
4 "Read",
5 "Glob",
6 "Grep",
7 "LS",
8 "Edit",
9 "MultiEdit",
10 "Write(src/**)",
11 "Write(tests/**)",
12 "Bash(npm run *)",
13 "Bash(npm test *)",
14 "Bash(npx tsc *)",
15 "Bash(git status)",
16 "Bash(git diff *)",
17 "Bash(git log *)",
18 "Bash(git add *)",
19 "Bash(git commit *)"
20 ],
21 "deny": [
22 "Read(**/.env*)",
23 "Read(**/.dev.vars*)",
24 "Read(**/*.pem)",
25 "Read(**/*.key)",
26 "Read(**/secrets/**)",
27 "Read(**/credentials/**)",
28 "Read(**/.aws/**)",
29 "Read(**/.ssh/**)",
30 "Read(**/config/database.yml)",
31 "Read(**/config/credentials.json)",
32 "Read(**/.npmrc)",
33 "Read(**/.pypirc)",
34 "Write(**/.env*)",
35 "Write(**/secrets/**)",
36 "Write(**/.ssh/**)",
37 "Write(.github/workflows/*)",
38 "Bash(rm -rf *)",
39 "Bash(sudo *)",
40 "Bash(git push *)",
41 "Bash(npm publish *)",
42 "Bash(curl * | sh)",
43 "Bash(wget *)",
44 "Bash(chmod *)"
45 ],
46 "defaultMode": "acceptEdits"
47 }
48}

Đây là settings.json từ bài viết trước của tôi cộng với tất cả quy tắc bảo mật từ bài này. Quy tắc cho phép cho quy trình làm việc hàng ngày, quy tắc từ chối cho bí mật và các thao tác nguy hiểm. Một file, bảo vệ toàn diện.

Danh sách kiểm tra

Trước phiên Claude Code tiếp theo của bạn:

  1. Bạn đã có quy tắc từ chối cho file .env trong settings.json chưa?
  1. Test của bạn có dùng .env.test với giá trị giả không?
  1. Đã có pre-commit hook quét các mẫu bí mật chưa?
  1. Thông tin đăng nhập production có được lưu trong vault, không phải file văn bản thuần không?
  1. .env có trong .gitignore của bạn chưa?
  1. File .env có nằm ngoài thư mục dự án để tăng thêm an toàn không?

Nếu bạn đã kiểm tra cả 6, bí mật của bạn được bảo vệ tối đa. Nếu bạn kiểm tra 0, bạn chỉ còn cách một prompt Claude mơ hồ để API key của bạn xuất hiện trong nhật ký hội thoại trên máy chủ của Anthropic.

Tôi chia sẻ ghi chú hàng ngày về AI, tài chính và vibe coding trong kênh Telegram của mình: **https://t.me/zodchixquant**

Cảm ơn bạn đã đọc🙏🏼

darkzodchi - inline image

More patterns to decode

Recent viral articles

Explore more viral articles

Được xây dựng cho nhà sáng tạo.

Tìm ý tưởng từ các bài viết viral trên 𝕏, giải mã vì sao chúng hiệu quả và biến pattern đó thành góc nội dung tiếp theo của bạn.