安全审查技能

100 0 更新时间: 2026-07-15 14:32:38

安全审查技能是ECC(Agent Harness性能优化系统)中的一个核心技能模块,专门用于对代码、配置和系统架构进行全面的安全审查。它能够自动识别潜在的安全漏洞、配置错误和不合规的编码实践,帮助开发者在开发早期发现并修复安全问题。该技能支持多种编程语言和框架,提供详细的审查报告和修复建议,适用于CI/CD流水线集成、代码审查流程和日常开发安全检查。通过自动化安全审查,团队可以显著降低安全风险,提高软件质量和合规性。

安装
bunx skills add https://github.com/affaan-m/ECC --skill security-review
技能详情 readonly

一、技能概述

该技能适用于以下场景:实现认证或授权、处理用户输入或文件上传、创建新的 API 端点、使用密钥或凭证、实现支付功能、存储或传输敏感数据、集成第三方 API。它提供了一套系统化的安全审查框架,覆盖从代码编写到生产部署的完整安全生命周期。

核心原则:安全不是可选项——任何一个漏洞都可能危及整个平台。当有疑问时,宁可选择保守的方案。


二、核心功能

1. 密钥管理(Secret Management)

错误做法 ❌ 正确做法 ✅
const apiKey = "sk-proj-xxxxx" const apiKey = process.env.OPENAI_API_KEY
const dbPassword = "password123" const dbUrl = process.env.DATABASE_URL

验证检查

  • 无硬编码的 API 密钥、token 或密码

  • 所有密钥存储在环境变量中

  • .env.local 在 .gitignore 中

  • 密钥不在 git 历史中

  • 生产密钥托管在 Vercel、Railway 等平台

2. 输入验证(Input Validation)

  • 使用 Zod 等库定义验证 Schema

  • 验证文件上传的大小、MIME 类型和扩展名

  • 使用白名单验证(而非黑名单)

  • 错误消息不泄露敏感信息

typescript
import { z } from 'zod'
const CreateUserSchema = z.object({
  email: z.string().email(),
  name: z.string().min(1).max(100),
  age: z.number().int().min(0).max(150)
})

3. SQL 注入防护(SQL Injection Prevention)

  • 绝不拼接 SQL 字符串

  • 始终使用参数化查询或 ORM/Query Builder

  • 在 Supabase 中使用 .eq() 等方法自动处理

typescript
// ❌ 危险
const query = `SELECT * FROM users WHERE email = '${userEmail}'`
// ✅ 安全
await db.query('SELECT * FROM users WHERE email = $1', [userEmail])

4. 认证与授权(Authentication & Authorization)

错误做法 ❌ 正确做法 ✅
JWT 存储在 localStorage(易受 XSS 攻击) JWT 存储在 HttpOnly、Secure、SameSite=Strict 的 Cookie 中

验证检查

  • 执行敏感操作前先验证授权

  • Supabase 中启用 Row Level Security(RLS)

  • 实现基于角色的访问控制

5. XSS 防护(XSS Prevention)

  • 使用 DOMPurify 等库净化用户提供的 HTML

  • 配置 Content Security Policy(CSP)

  • React 等框架的默认 XSS 保护利用好

typescript
import DOMPurify from 'isomorphic-dompurify'
const clean = DOMPurify.sanitize(html, {
  ALLOWED_TAGS: ['b', 'i', 'em', 'strong', 'p'],
  ALLOWED_ATTR: []
})

6. CSRF 防护(CSRF Protection)

  • 在状态变更操作中使用 CSRF Token

  • 所有 Cookie 设置 SameSite=Strict

  • 实现双重提交 Cookie 模式

7. 速率限制(Rate Limiting)

  • 所有 API 端点启用速率限制

  • 对搜索等昂贵操作使用更严格的限制

  • 支持基于 IP 和基于用户(已认证)的限流

typescript
const limiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 分钟
  max: 100, // 每窗口 100 次请求
  message: 'Too many requests'
})

8. 敏感数据暴露防护(Sensitive Data Exposure)

  • 绝不在日志中记录密码、token 或完整支付卡数据

  • 用户端只返回通用错误消息,详细错误仅记录在服务器日志

  • 不向用户暴露 stack trace

typescript
// ❌ 错误:记录敏感数据
console.log('User login:', { email, password })
// ✅ 正确:脱敏
console.log('User login:', { email, userId })

9. 区块链安全(Blockchain Security - Solana)

  • 验证钱包签名

  • 验证交易详情(接收方、金额)

  • 交易前检查余额

  • 不盲目签名交易

10. 依赖安全(Dependency Security)

  • 定期运行 npm audit

  • 提交 lock 文件

  • CI/CD 中使用 npm ci

  • 启用 GitHub Dependabot

  • 定期安全更新


三、主要用途

  1. 代码审查与安全审计 —— 在审查代码时对照完整清单检查常见安全漏洞

  2. 新功能开发安全指导 —— 在添加认证、API 端点、支付功能时提供安全模式参考

  3. 生产部署前安全检查 —— 部署前逐项确认所有安全措施已到位

  4. 团队安全培训 —— 作为开发团队的安全编码规范参考文档

  5. 漏洞修复参考 —— 发现安全问题时快速定位对应的防护措施


四、部署前检查清单

在生产部署前,必须逐项确认

  • 无硬编码密钥,全部使用环境变量

  • 所有用户输入已验证

  • 所有数据库查询使用参数化

  • 用户内容已进行 XSS 净化

  • CSRF 防护已启用

  • Token 处理正确(HttpOnly Cookie)

  • 角色验证已就位

  • 所有端点启用速率限制

  • 生产环境强制 HTTPS

  • 安全标头已配置(CSP、X-Frame-Options)

  • 错误消息不泄露敏感数据

  • 日志不记录敏感数据

  • 依赖已更新、无已知漏洞

  • Supabase RLS 已启用

  • CORS 配置正确

  • 文件上传已验证(大小、类型)

  • 钱包签名已验证(如适用)


五、重要原则

  1. 绝不硬编码密钥 —— 所有密钥使用环境变量

  2. 始终验证输入 —— 使用 Schema 验证,使用白名单而非黑名单

  3. 始终使用参数化查询 —— 绝不拼接 SQL 字符串

  4. Token 存储在 HttpOnly Cookie —— 绝不使用 localStorage

  5. 执行操作前先授权 —— 始终先验证用户权限

  6. 净化用户提供的 HTML —— 使用 DOMPurify 等库

  7. 启用速率限制 —— 所有 API 端点都需要

  8. 日志脱敏 —— 绝不记录密码、token 或 PII

  9. 启用 RLS —— 在 Supabase 中为所有表启用行级安全

  10. 定期更新依赖 —— 运行 npm audit 并修复漏洞


六、总结

Security Review 是一套完整的安全审查与代码审计技能,覆盖密钥管理、输入验证、SQL 注入防护、认证授权、XSS 防御、CSRF 防护、速率限制、敏感数据保护、区块链安全、依赖安全等 10 个核心安全领域。它提供了清晰的“错误 vs 正确”对比示例和逐项验证检查清单,适用于代码审查、新功能开发、生产部署前检查、团队安全培训和漏洞修复等场景。该技能源自 ECC 项目,强调“安全不是可选项——任何一个漏洞都可能危及整个平台”。