安全与风控
TypeScript/Node.js…
对 TypeScript/Node.js(Express、NestJS、Next.js)代码库进行 OWASP 合规的安全审查,按严重级别输出发现与修复建议。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
TypeScript/Node.js 应通用
解决思路
- 确定审查范围:明确待审查的文件与模块,优先关注认证、授权、数据处理、API 端点和配置文件;用 grep 搜索安全敏感模式(eval、exec、innerHTML、密码处理、JWT 操作)。检查点:确认至少识别出 3 个安全敏感文件/模块后再继续。
- 检查认证与授权:审查 JWT 实现(签名算法、过期时间、刷新令牌)、OAuth2/OIDC 集成、会话管理、密码哈希(bcrypt/argon2)和多因素认证;验证受保护路由确实强制执行了认证。检查点:用 grep 确认所有路由处理器都应用了认证守卫或中间件。
- 扫描注入漏洞:检查数据库查询中的 SQL/NoSQL 注入、exec/spawn 中的命令注入、模板注入和 LDAP 注入;验证是否使用参数化查询和输入校验。检查点:用 grep 确认所有数据库查询都使用参数化,没有与用户输入做字符串拼接。
- 审查输入校验:检查 API 输入是否用 Zod、Joi 或 class-validator 校验;验证 schema 完整性(类型约束、长度限制、格式校验);检查是否存在绕过校验的路径。检查点:确认所有公开 API 端点都有对应的校验 schema。
- 评估 XSS 防护:审查 React 组件中 dangerouslySetInnerHTML 的使用,检查 Content Security Policy 响应头,验证用户生成内容是否经过 HTML 净化;详细模式见 references/xss-prevention.md。检查点:用 grep 确认所有 dangerouslySetInnerHTML 使用都通过 DOMPurify 或等价方案做了净化。
- 检查密钥管理:扫描源码中硬编码的凭据、API key 和密钥;确认 .env 文件已被 gitignore,密钥通过正规的密钥管理服务访问。检查点:运行 grep -r "password\|secret\|api.*key\|token" --include="*.ts" 找出代码中可能的密钥。
- 审查依赖安全:运行 npm audit 或检查 package-lock.json 中的已知漏洞;识别存在 CVE 的过时依赖;检查是否存在不必要的依赖。检查点:确认 npm audit 结果已审查,且严重漏洞已处理。
- 评估安全响应头与配置:检查 helmet.js 或手动的安全响应头配置;审查 CORS 策略、限流、HTTPS 强制、Cookie 安全标志(HttpOnly、Secure、SameSite)和 CSP;配置示例见 references/security-headers.md。检查点:用 grep 确认 helmet 或等价的安全响应头已全局应用。
- 生成安全报告:输出结构化报告,包含按严重级别分类的发现、带代码示例的修复指引和安全态势总结。反馈循环:若发现 Critical 或 High 漏洞,在定稿前重新扫描相关模块中的相似模式,用 grep 确认同一漏洞模式是否存在于其他地方。
- 按固定格式组织审查结果:1) 安全态势总结(1-10 分总体评估、关键观察和风险等级);2) Critical 漏洞(需立即处理);3) High 优先级(30 天内处理);4) Medium 优先级(90 天内处理);5) Low 优先级(下个周期);6) 正面安全观察(值得肯定的良好实践);7) 修复路线图(按优先级排列的行动项,附最关键修复的代码示例)。
- 遵循最佳实践:在 API 边界校验所有输入,绝不只信任客户端校验;使用参数化查询或 ORM,绝不把用户输入拼进查询;密钥存放在环境变量或密钥管理器中,绝不写入源码;对数据库账号、API key 和 IAM 角色应用最小权限原则;启用安全响应头(helmet.js)并将 CORS 限制为已知来源;对所有公开端点实施限流;用 bcrypt 或 argon2 哈希密码,绝不用 MD5/SHA 处理密码;设置 Cookie 标志 HttpOnly、Secure、SameSite=Strict;在 CI 流水线中运行 npm audit 捕获依赖漏洞;记录安全事件(登录失败、权限拒绝)但不记录敏感数据。
- 遵守约束与警告:安全审查不能替代专业渗透测试;只关注代码级漏洞,基础设施安全不在范围内;尊重项目所用框架,提供框架特定的修复指引;不要记录、打印或暴露发现的密钥,只报告其位置;依赖漏洞应评估实际可利用性,而不只看是否存在;安全建议必须务实,权衡实现成本与风险降低效果。
适用边界 · 注意事项
- 不能替代专业渗透测试,也不覆盖基础设施安全(仅限代码级漏洞)
- 不适用于非 TypeScript/Node.js 技术栈的项目
- 不要在报告中记录、打印或暴露发现的密钥内容,只报告位置