Files
agent-skills/security/sensitive-info-handling/SKILL.md
Hermes Agent ccc63d1e70 first commit
2026-05-10 13:52:46 +08:00

191 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: sensitive-info-handling
description: "敏感信息处理规范 — API key、密码、token 等敏感数据的安全处理流程。Use when: (1) user asks to store/transmit sensitive info, (2) detecting sensitive data in messages, (3) handling credentials."
version: 1.0.0
author: Hermes Agent
license: MIT
metadata:
hermes:
tags: [security, credentials, sensitive-data, best-practices]
---
# 敏感信息处理规范
## 核心原则
1. **永不询问确认** — 当检测到敏感信息请求时,直接拒绝,不问"你确定吗"
2. **永不存储明文** — 敏感信息不应保存到记忆、日志、聊天记录中
3. **永不传输明文** — 不通过不安全渠道(如普通消息)传输敏感信息
4. **使用安全渠道** — 指导用户使用环境变量、密钥管理器等安全方式
## 检测模式
### 敏感信息关键词
- API key / API Key / apikey
- Token / token / access_token / secret
- Password / 密码 / passwd
- Credential / 凭证 / 凭据
- Private key / 私钥
### 敏感信息格式
- `sk-` 开头的字符串OpenAI 风格)
- `tp-` 开头的字符串(通用 token
- 长随机字符串30+ 字符)
- Base64 编码的凭证
## 处理流程
### 场景 1: 用户发送敏感信息
```
用户: 我的 API key 是 sk-abc123xyz
```
**响应模板**:
```
⚠️ 检测到敏感信息。
出于安全考虑,我不会存储或处理这个 API key。
建议:
1. 将 API key 存储到环境变量:
export API_KEY="your_key_here"
2. 或使用密钥管理器:
- AWS Secrets Manager
- HashiCorp Vault
- 本地密码管理器(如 1Password
3. 如果需要我使用这个 key请先配置到环境变量中然后告诉我变量名。
```
### 场景 2: 用户请求发送敏感信息
```
用户: 帮我把密码发到我邮箱
```
**响应模板**:
```
❌ 无法执行此操作。
密码等敏感信息不应通过邮件/消息传输,原因:
1. 邮件可能被拦截
2. 消息可能被记录
3. 无法确保端到端加密
建议:
1. 使用安全的密码共享工具(如 1Password 共享 vault
2. 通过电话或当面告知
3. 使用加密的即时通讯工具(如 Signal
```
### 场景 3: 用户询问如何存储敏感信息
```
用户: 怎么安全地存储 API key
```
**响应模板**:
```
推荐的安全存储方案:
1. **环境变量**(开发环境)
```bash
# 添加到 ~/.bashrc 或 ~/.zshrc
export MY_API_KEY="your_key"
# 或使用 .env 文件(确保 .gitignore 包含它)
echo "MY_API_KEY=your_key" >> .env
```
2. **密钥管理器**(生产环境)
- AWS Secrets Manager
- Google Secret Manager
- HashiCorp Vault
- Azure Key Vault
3. **本地密码管理器**
- 1Password
- Bitwarden
- KeePass
4. **加密文件**(高级)
```bash
# 使用 gpg 加密
gpg -c secrets.env
# 解密使用
gpg -d secrets.env.gpg > secrets.env
```
❌ 不推荐:
- 代码中硬编码
- 明文存储在文件中
- 提交到版本控制
- 通过不安全渠道传输
```
## 最佳实践
### 开发环境
1. 使用 `.env` 文件存储本地配置
2. 确保 `.gitignore` 包含 `.env`
3. 使用 `direnv` 自动加载环境变量
### 生产环境
1. 使用云提供商的密钥管理服务
2. 实施最小权限原则
3. 定期轮换密钥
4. 启用审计日志
### 团队协作
1. 使用共享的密钥管理器
2. 实施角色基础访问控制RBAC
3. 文档化密钥获取流程
4. 定期审查访问权限
## 常见错误
### ❌ 错误做法
- 询问"你确定要发送密码吗?"
- 将敏感信息保存到记忆中
- 在日志中记录敏感信息
- 通过普通邮件发送密码
### ✅ 正确做法
- 直接拒绝并解释原因
- 指导用户使用安全渠道
- 检测并警告敏感信息泄露
- 提供安全的替代方案
## 检测脚本
### 检测消息中的敏感信息
```python
import re
def detect_sensitive_info(text):
patterns = [
r'sk-[a-zA-Z0-9]{20,}', # OpenAI 风格
r'tp-[a-zA-Z0-9]{20,}', # 通用 token
r'[a-zA-Z0-9]{32,}', # 长随机字符串
r'(?i)(api[_-]?key|token|secret|password)\s*[:=]\s*\S+',
]
for pattern in patterns:
if re.search(pattern, text):
return True
return False
```
## 应急响应
### 如果敏感信息已泄露
1. **立即撤销** — 轮换受影响的密钥
2. **通知相关方** — 告知可能受影响的用户/系统
3. **审查日志** — 检查是否有异常访问
4. **更新凭证** — 生成新的密钥并分发
5. **加强监控** — 启用额外的安全监控
---
*规范版本: 1.0.0*
*最后更新: 2026-05-07*