skills/senweaver/senweaver-ide/security-reviewer

security-reviewer

SKILL.md

安全审查专家

专注于代码安全审查、漏洞识别和安全加固,产出可执行的修复方案。

核心工作流

  1. 确定范围 — 梳理攻击面和关键路径
  2. 自动扫描 — 运行 SAST、依赖审计、密钥扫描工具
  3. 人工审查 — 重点审查认证、输入处理、加密逻辑
  4. 分类定级 — 验证发现并按严重性分级(严重/高/中/低)
  5. 报告修复 — 记录发现并提供具体修复方案

使用内置工具

审查阶段 工具 用法
读取代码 read_file 审查认证/授权/加密相关代码
搜索模式 grep 搜索硬编码密钥、不安全函数、SQL拼接
运行扫描 run_command npm audit, pip audit, npx eslint --rule security
密钥扫描 run_command npx gitleaks detect --source .
修复漏洞 edit_file 直接修复发现的安全问题
检查依赖 run_command npm ls, pip show, 检查已知CVE

OWASP Top 10 检查清单

# 漏洞类别 检查要点 grep 搜索模式
A01 权限控制失效 水平/垂直越权、IDOR userId.*req.params, isAdmin
A02 加密机制失效 明文密码、弱哈希、HTTP传输 md5, sha1, password.*=, http://
A03 注入 SQL注入、XSS、命令注入 \${.*}.*query, innerHTML, eval(, exec(
A04 不安全设计 缺少速率限制、业务逻辑缺陷 rateLimit, throttle
A05 安全配置错误 默认凭证、详细错误暴露、CORS Access-Control, cors({, debug.*true
A06 过时组件 已知CVE的依赖 npm audit, pip audit
A07 认证失效 弱密码策略、缺少MFA、会话固定 jwt.sign, session, cookie
A08 数据完整性 不安全的反序列化、未验证的更新 JSON.parse, deserialize, pickle
A09 日志监控不足 缺少审计日志、安全事件未记录 logger, audit, console.log
A10 SSRF 未验证的URL请求 fetch(, axios(, request(, url.*req

常见漏洞模式与修复

SQL 注入

// ❌ 字符串拼接 — 存在SQL注入风险
const query = `SELECT * FROM users WHERE id = ${id}`;

// ✅ 参数化查询
const query = 'SELECT * FROM users WHERE id = $1';
const result = await db.query(query, [id]);

XSS(跨站脚本)

// ❌ 直接插入用户输入到 DOM
element.innerHTML = userInput;

// ✅ 使用文本节点或转义
element.textContent = userInput;
// 或使用 DOMPurify
element.innerHTML = DOMPurify.sanitize(userInput);

命令注入

// ❌ 拼接用户输入到命令
exec(`ls ${userInput}`);

// ✅ 使用参数数组
execFile('ls', [userInput]);

硬编码密钥

// ❌ 硬编码密钥
const API_KEY = 'sk-abc123xyz789';
const dbPassword = 'admin123';

// ✅ 环境变量
const API_KEY = process.env.API_KEY;
const dbPassword = process.env.DB_PASSWORD;

不安全的认证

// ❌ JWT 无过期时间
const token = jwt.sign({ userId }, secret);

// ✅ 设置合理的过期时间
const token = jwt.sign({ userId }, secret, { expiresIn: '1h' });

路径遍历

// ❌ 未验证的文件路径
const filePath = path.join('/uploads', req.params.filename);

// ✅ 验证路径不逃逸
const safePath = path.resolve('/uploads', req.params.filename);
if (!safePath.startsWith('/uploads/')) {
  throw new Error('Invalid path');
}

CORS 配置错误

// ❌ 允许所有来源
app.use(cors({ origin: '*', credentials: true }));

// ✅ 限制允许的来源
app.use(cors({
  origin: ['https://myapp.com'],
  credentials: true,
  methods: ['GET', 'POST'],
}));

密钥泄露扫描模式

grep 搜索以下模式:

# API 密钥
(api[_-]?key|apikey)\s*[:=]\s*['"][a-zA-Z0-9]{20,}

# AWS 凭证
AKIA[0-9A-Z]{16}

# 私钥
-----BEGIN (RSA |EC )?PRIVATE KEY-----

# 通用密码
(password|passwd|pwd|secret)\s*[:=]\s*['"][^'"]{8,}

# JWT
eyJ[a-zA-Z0-9_-]{10,}\.eyJ[a-zA-Z0-9_-]{10,}

安全审查报告模板

# 安全审查报告: [项目/模块名]

## 摘要
- 审查范围: [描述]
- 审查日期: [日期]
- 风险等级: [严重/高/中/低]

## 发现统计
| 严重性 | 数量 |
|--------|------|
| 严重 | X |
|| X |
|| X |
|| X |

## 详细发现

### [CVE-1] 严重: SQL 注入
- **位置**: `src/api/users.ts:45`
- **描述**: 用户输入直接拼接到 SQL 查询
- **影响**: 攻击者可读取/修改数据库任意数据
- **修复**:
  ```typescript
  // 使用参数化查询替代字符串拼接
  • 验证: 修改后运行 npm test 确认功能正常

建议优先级

  1. [立即] 修复所有严重和高危漏洞
  2. [本周] 修复中危漏洞
  3. [下次迭代] 处理低危发现

## 严重性定义

| 严重性 | CVSS | 定义 | 示例 |
|--------|------|------|------|
| **严重** | 9.0-10.0 | 可远程利用,无需认证 | RCE、SQL注入、认证绕过 |
| **高** | 7.0-8.9 | 需要部分条件才能利用 | 存储型XSS、权限提升 |
| **中** | 4.0-6.9 | 影响有限或利用复杂 | 反射型XSS、信息泄露 |
| **低** | 0.1-3.9 | 需要特殊条件 | 详细错误消息、过时头信息 |

## 审查原则

### 必须做
- 先检查认证/授权
- 先运行自动化工具再人工审查
- 每个发现提供具体文件/行号
- 每个发现附带修复方案
- 一致地评定严重性
- 检查代码中的密钥/凭证
- 严重发现立即报告

### 绝不做
- 跳过人工审查(工具会遗漏)
- 忽略"低"严重性问题
- 假设框架处理了一切
- 在未授权的系统上测试
- 超出定义范围测试

## 知识参考

OWASP Top 10、CWE、Semgrep、Bandit、ESLint Security、npm audit、gitleaks、trufflehog、CVSS 评分、Trivy、Checkov、CSP、SRI、HSTS、CORS
Weekly Installs
1
GitHub Stars
15
First Seen
13 days ago
Installed on
amp1
cline1
opencode1
cursor1
kimi-cli1
codex1