如何用 Hooks 保护 Claude Code 中的敏感密钥?

密钥保护 Hook

以下步骤将帮助您设置一个用于密钥保护的 Hook。

  1. 复制 Hook 脚本

    mkdir -p ~/.claude/hooks
    git clone https://github.com/karanb192/claude-code-hooks.git
    cp hook-scripts/pre-tool-use/protect-secrets.js ~/.claude/hooks/

  2. .claude/settings.json中添加配置

    {
    "hooks": {
    "PreToolUse": [
    {
    "matcher": "Read|Edit|Write|Bash",
    "hooks": [
    {
    "type": "command",
    "command": "node ~/.claude/hooks/protect-secrets.js"
    }
    ]
    }
    ]
    }
    }

  3. 重启 Claude Code 以激活该 Hook
    💡 提示 :可以结合多个 Hooks 使用,例如 block-dangerous-commandsprotect-secrets,以实现更全面的安全防护。

保护机密

此 Hook 可防止 Claude Code 读取、修改或窃取敏感文件,包括但不限于:

  • .env 文件

  • SSH 密钥(如 ~/.ssh/id_*

  • AWS 凭证(如 ~/.aws/credentials

  • Kubernetes 配置文件(如 ~/.kube/config

  • 匹配常见密钥模式的任意文件
    此外,它还会阻止可能泄露密钥的 Bash 命令,例如:

  • cat .env

  • echo $API_KEY

  • curl -d @.env (数据窃取)

  • printenv (环境信息导出)
    通过上述配置,您可以有效增强 Claude Code 的安全性,确保敏感信息不被未经授权地访问或篡改。

    {
    "hooks": {
    "PreToolUse": [{
    "matcher": "Read|Edit|Write|Bash",
    "hooks": [{
    "type": "command",
    "command": "node ~/.claude/hooks/protect-secrets.js"
    }]
    }]
    }
    }

根据"实际拦截功能"对以下内容进行分类整理:

1. 文件访问控制

当尝试读取、修改或写入下列敏感文件时,系统将直接拒绝访问:

  • 关键级别(默认包含高风险)
    • 环境配置文件:.env 及其变体如 .env.*, .envrc
    • SSH 相关密钥及认证文件:位于 ~/.ssh/ 目录下的 id_* 文件(例如 id_rsa, id_ed25519等),以及 authorized_keys
    • 云服务凭证:包括但不限于 ~/.aws/credentials, ~/.aws/config, ~/.kube/config
    • 各类证书与密钥:.pem, .key, .p12/.pfx 扩展名的文件
  • 高风险(当前 SAFETY_LEVEL 设置为 'high' 时启用)
    • 认证信息存储:credentials.json
    • 密码管理文件:扩展名为 .yaml, .json, 或 .tomlsecretscredentials 文件
    • 特定于 GCP, Azure, GCloud 的认证文件
    • Docker 配置文件:~/.docker/config.json(可能包含注册表认证信息)
    • 其他开发工具相关的认证文件:.netrc, .npmrc, .pypirc, .gem/credentials, .vault-token
    • Java 应用程序密钥库:*.keystore, *.jks
    • Web 服务器和数据库密码文件:.htpasswd, .pgpass, .my.cnf
  • 严格模式(尚未启用)
    • 数据库配置文件:database.json/yaml
    • 已知主机列表:.ssh/known_hosts
    • Git 客户端配置:.gitconfig
    • Curl 客户端配置:.curlrc

注释 :模板或示例环境变量文件如 .env.example, .sample, .template 等被加入白名单,默认允许访问。

2. Bash 命令拦截

对于可能引起数据泄露或系统破坏的行为,系统将阻止执行以下命令:

  • 直接查看敏感信息
    • 使用 cat, less, head, tail 查看 .env 文件
    • 读取私有密钥文件(如 id_rsa, .pem, .key
    • 显示 AWS 凭据
  • 环境变量暴露
    • 列出所有环境变量:printenv, env
    • 显示特定环境变量值:echo $TOKEN, printf $PASSWORD
    • 加载环境变量:source .env, . .env
    • 导出环境变量:export $(cat .env ...)
  • 数据外泄
    • 通过 curl 上传或 POST 敏感文件
    • 利用 wget --post-file 发送敏感信息
    • 使用 scprsync 将敏感文件传输到远程位置
    • 采用 nc < .env 方式进行 netcat 外传
  • 敏感文件操作
    • 复制或移动 .env 文件
    • 删除重要密钥文件,如 .env, id_rsa, .aws/credentials
    • 清空敏感文件内容:truncate
  • 进程环境读取
    • 访问 /proc/*/environ 获取进程环境变量
    • 使用 find ... -exec cat ...xargs cat ... 读取 .env 文件
  • 仅在严格模式下启用
    • 对关键词如 password, token, apikey 进行递归搜索
    • 对秘密信息执行 Base64 编码

3. 适用场景概述

本脚本旨在保护如下应用场景:

  1. 防止意外读取:避免 AI 或脚本无意中读取本地或项目中的敏感凭据。
  2. 防止误修改/删除:禁止对关键密钥文件进行未经授权的写入、移动或删除操作。
  3. 防止数据外泄 :阻止使用 curl, scp, wget, nc 等工具将敏感信息发送出去。
  4. 防止环境变量泄漏 :限制 env, printenv, echo $TOKEN 等命令的使用以避免泄露环境变量。
  5. 可追溯性 :任何触发规则的行为都将记录至 ~/.claude/hooks-logs/ 中,便于后续审计。

补充说明

增加对 .zshrc, .bashrc 等用户配置文件的安全检查与拦截。

相关推荐
一乐小哥13 小时前
坚持迭代一个 Chrome 插件半年后,我的同事问我:"这不是 Chrome 自带的功能吗?"
chrome·github·ai编程
donecoding13 小时前
Playwright MCP 页面捕获:Snapshot、截图、HTML 到底选哪个?
前端·ai编程·前端工程化
木昆子14 小时前
用一个业务案例,摸透Code Buddy的Skill原理
ai编程
小虎AI生活16 小时前
2026 年 AI 搞钱的八个方向,第五个被严重低估
ai编程
zzzb12345616 小时前
Claude Code 免费接入 NVIDIA NIM 国产大模型完整教程(零成本可用)
claudecode·cliproxyapi·cc switch·nvidia api
sunneo17 小时前
专栏C-产品战略与竞争-05-产品组合
人工智能·产品运营·产品经理·ai编程·ai-native
GISer_Jing18 小时前
从入门到落地:前端开发者的AI Agent全栈学习路线
前端·人工智能·ai编程
lifewange19 小时前
GitHubCopilot 安装教程
ai编程
名不经传的养虾人19 小时前
从0到1:企业级AI项目迭代日记 Vol.14|正式版上线第一周:一个403、一次重构、一个新方向
人工智能·ai编程·ai创业·企业ai·多agent协作
guslegend20 小时前
第2节:规范驱动开发SDD,让AI永远在轨道上
人工智能·ai编程