关于 verify-security
这项技能在本地检查源代码和配置中的安全反模式与潜在漏洞,涵盖硬编码密钥、依赖版本、输入处理、错误信息暴露和敏感数据日志。
主要功能
- 01扫描硬编码密钥
- 02检查依赖版本固定情况
- 03审查外部输入处理
- 04标记错误详情泄露
- 05检查安全相关默认配置
- 06查找日志中的敏感数据
适用场景
- 01审计仓库中的硬编码凭据
- 02检查依赖声明
- 03核查输入处理和错误响应
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ aurite-ai/ agent-verifier --skill verify-security安装后在 Claude Code 中输入/verify-security确认已加载。
详细介绍
安全验证
目的
验证代码中是否存在安全反模式和漏洞。所有分析均在本地进行,代码绝不会离开你的设备。
适用场景
当用户要求以下操作时,触发此技能:
- “验证 Agent 安全性”
- “验证安全性”
- “检查是否存在密钥”
- “扫描漏洞”
- “安全审计”
**注意:**如需全面验证模式、质量和特定语言检查,请告知用户说 “验证 Agent”。
流程
步骤 1:发现文件
定位要分析的文件:
配置文件:
package.json、pyproject.toml、Cargo.toml- 依赖项.env.example- 环境模板(标记看起来像真实密钥的值).gitignore- 确认.env和.env.local已被忽略(如果没有,将其标记为问题)config.py、settings.py、config.ts- 配置
源文件:
*.py、*.ts、*.js、*.go、*.rs- 源代码- 优先检查名称中包含以下内容的文件:
auth、api、client、secret、config
排除:
node_modules/、.venv/、venv/、__pycache__/*.test.*、*.spec.*、*_test.go.env、.env.local、.env.*.local- 切勿打开这些文件。其中保存着用户的真实密钥。只检查它们是否被 git 忽略。
步骤 2:运行安全检查
检查级别
[PATTERN]— 机械式检查。严格按说明执行。[HEURISTIC]— 需要判断。清楚标记检查结果。
每项检查结果都标记为 [P](模式)或 [H](启发式)。
2.1 [PATTERN] 硬编码密钥
扫描与以下模式匹配的赋值(不区分大小写):
| 变量模式 | 不通过条件 |
|---|---|
API_KEY | 被赋值为字符串字面量 |
SECRET | 被赋值为字符串字面量 |
PASSWORD | 被赋值为字符串字面量 |
TOKEN | 被赋值为字符串字面量 |
PRIVATE_KEY | 被赋值为字符串字面量 |
AWS_ACCESS_KEY_ID | 被赋值为字符串字面量 |
AWS_SECRET_ACCESS_KEY | 被赋值为字符串字面量 |
失败示例:
# ❌ Issue
API_KEY = "sk-abc123..."
password = "hunter2"
OPENAI_API_KEY = "sk-proj-..."
# ✅ Pass (value loaded at runtime from env or a secrets manager, never a literal)
api_key = settings.api_key
password = secret_store.get("db-password")
还要标记:
- 与已知 API 密钥模式匹配的字符串字面量:
sk-...(OpenAI)sk-ant-...(Anthropic)AKIA...(AWS)ghp_...(GitHub)xoxb-...(Slack)
严重性:❌ 问题
2.2 [PATTERN] 依赖项版本固定
Python(requirements.txt):
| 模式 | 严重性 |
|---|---|
package>=1.0 | ❌ 问题 |
package>1.0 | ❌ 问题 |
package(未指定版本) | ❌ 问题 |
package==1.0.0 | ✅ 通过 |
package~=1.0 | ✅ 通过 |
Python(pyproject.toml):
检查 [project.dependencies] 和 [tool.poetry.dependencies]:
- 未固定版本或使用
>=→ ❌ 问题 - 使用
==、^或~固定版本 → ✅ 通过
JavaScript/TypeScript(package.json):
| 模式 | 严重性 |
|---|---|
"package": "*" | ❌ 问题 |
"package": "latest" | ❌ 问题 |
"package": ">=1.0.0" | ⚠️ 警告 |
"package": "^1.0.0" | ✅ 通过 |
"package": "~1.0.0" | ✅ 通过 |
"package": "1.0.0" | ✅ 通过 |
2.3 [HEURISTIC] 输入验证
检查对外部数据的处理:
查找:
- HTTP 请求处理器(
@app.route、router.get等) - 用户输入处理(
request.body、req.params、input()) - 文件上传
- 包含用户输入的数据库查询
以下情况需标记:
- 未经净化便将用户输入直接传递给数据库查询
- 根据用户输入构造文件路径,但未进行验证
- 解析外部数据中的 JSON 时未进行架构验证
严重性:⚠️ 警告
需标记的示例模式:
# ⚠️ Warning - SQL without parameterization
query = f"SELECT * FROM users WHERE id = {user_id}"
# ⚠️ Warning - Path traversal risk
file_path = os.path.join(base_dir, user_filename)
# ✅ Pass - Parameterized query
cursor.execute("SELECT * FROM users WHERE id = ?", (user_id,))
2.4 [HEURISTIC] 错误消息泄露
检查错误处理是否泄露信息:
以下情况需标记:
- 在 HTTP 响应中返回堆栈跟踪
- 向用户暴露数据库错误消息
- 错误消息中包含内部路径或系统信息
- 在生产代码中启用了调试模式
查找:
# ⚠️ Warning
except Exception as e:
return {"error": str(e)} # Exposes internal details
# ⚠️ Warning
app = Flask(__name__)
app.debug = True # Debug in production
# ✅ Pass
except Exception as e:
logger.error(f"Error: {e}")
return {"error": "An error occurred"}
严重性:⚠️ 警告
2.5 [HEURISTIC] 安全默认值
检查配置中是否存在不安全的默认值:
| 设置 | 不安全 | 安全 |
|---|---|---|
| CORS | *(允许所有来源) | 指定来源 |
| SSL 验证 | verify=False | verify=True 或省略 |
| 调试模式 | debug=True | debug=False |
| Cookie 安全 | secure=False | secure=True |
| CSRF | 已禁用 | 已启用 |
示例:
# ⚠️ Warning
requests.get(url, verify=False)
app.config["SESSION_COOKIE_SECURE"] = False
CORS(app, origins="*")
# ✅ Pass
requests.get(url) # verify=True is default
app.config["SESSION_COOKIE_SECURE"] = True
CORS(app, origins=ALLOWED_ORIGINS) # explicit allowlist
严重程度:⚠️ 警告
2.6 [HEURISTIC] 敏感数据日志记录
检查日志语句是否记录了敏感数据:
若日志记录包含以下内容,则标记:
- 密码或令牌
- API 密钥
- 个人身份信息(PII)
- 信用卡号
- 会话令牌
查找:
# ⚠️ Warning
logger.info(f"User login: {username} with password {password}")
print(f"API response: {response.json()}") # May contain tokens
# ✅ Pass
logger.info(f"User login: {username}")
logger.debug(f"Request to {url}") # No sensitive data
严重程度:⚠️ 警告
第 3 步:生成报告
# Security Verification Report
**Project:** [name or path]
**Date:** [current date]
**Files analyzed:** [count]
## Summary
✅ X checks passed | ⚠️ Y warnings | ❌ Z issues
## Secrets
- [x] No hardcoded secrets found
- [ ] ❌ Hardcoded secret at `[file:line]`
## Dependencies
- [x] All dependencies pinned
- [ ] ❌ Unpinned dependencies in `[file]`
## Input Validation
- [x] External input properly validated
- [ ] ⚠️ Potential injection at `[file:line]`
## Error Handling
- [x] Errors properly sanitized
- [ ] ⚠️ Information leakage at `[file:line]`
## Findings
> `[P]` = pattern-matched · `[H]` = heuristic
### ✅ Passing
- `[P]` No hardcoded API keys or secrets
- `[P]` Dependencies properly pinned
### ⚠️ Warnings
- `[H]` [Check]: [description]
- **Location:** [file:line]
- **Risk:** [what could go wrong]
- **Suggestion:** [how to fix]
### ❌ Issues
- `[P]` [Check]: [description]
- **Location:** [file:line]
- **Rule:** [which rule violated]
- **Fix:** [specific remediation]
## Recommendations
1. [Priority recommendation]
2. [Additional improvements]
如需全面验证(包括模式、质量和特定语言的检查),请说“verify agent”。
评论
支持 Markdown