Claude Code 能读写文件、执行命令、调用 API。能力越强,安全风险越大——这是开发者们最清楚不过的道理。企业在引入这类工具时,最关心的问题无非是:如何防止 AI 泄露密钥?如何避免它破坏生产环境?怎样确保它不会执行未授权的操作?
这篇文章系统梳理了 Claude Code 的安全机制和最佳实践,把整个防护体系拆开来看。
一、风险矩阵
先明确风险类型,才能有的放矢。
| 风险 | 场景 | 后果 |
|---|---|---|
| 密钥泄露 | Claude 读取 .env 并输出到对话 | 凭据暴露 |
| 文件篡改 | Claude 修改 package-lock.json | 依赖被污染 |
| 命令注入 | Claude 执行 rm -rf 或 git push --force | 数据丢失 |
| 越权访问 | Claude 通过 MCP 访问未授权资源 | 权限突破 |
| 上下文污染 | 恶意输入注入指令 | 行为劫持 |
核心原则很简单:最小权限 + 显式确认 + 防护层。每一条都会在后面详细展开。
二、敏感文件保护
2.1 默认保护
Claude Code 默认不会读取以下文件:.env、.env.*、*.pem、*.key、credentials.json、secrets.*。但这只是默认行为,并不保险——Claude 仍然可能被诱导读取这些文件,所以不能完全依赖这一层。
2.2 PreToolUse 拦截
更可靠的方案是用 Hooks 在工具执行前进行拦截。下面是一个拦截敏感文件访问的脚本示例:
#!/bin/bash
INPUT=$(cat)
FILE_PATH=$(echo "$INPUT" | jq -r '.filePath // .command // ""')
SENSITIVE_PATTERNS=(
".env"
".env.local"
".env.production"
"credentials"
"secrets"
"*.pem"
"*.key"
"id_rsa"
"id_ed25519"
"*.p12"
"*.pfx"
"package-lock.json"
"yarn.lock"
"pnpm-lock.yaml"
)
for pattern in "${SENSITIVE_PATTERNS[@]}"; do
if [[ "$FILE_PATH" == *"$pattern"* ]]; then
echo "