---
name: fec-security-review
description: 用于审查前端安全风险，如 XSS、CSRF、敏感数据暴露、不安全 DOM API、不可信用户输入、认证/token 处理、支付流程、文件上传、CSP、依赖风险或第三方脚本；中文触发词包括 安全审查、安全检查。
---

# 前端安全审查

## 评审模式与覆盖范围

用户明确指定的范围优先于默认行为。采用以下三种审核模式：

- **改动审核**：仅在明确要求或当前任务已明确最近改动、本次修改、暂存区、PR 或提交上下文时，审核这些改动及必要上下文。本地模式在请求范围内检查暂存、未暂存差异及相关未跟踪项目文件；仅要求暂存区时只审核暂存改动。无改动时说明没有可审核的改动，不自动切换到最近提交或扩大范围。
- **指定范围审核**：用户指定文件或目录时，建立范围内文件清单，审核其中现有代码，包括未改动代码；不要求 Git 差异。
- **全项目审核（默认）**：未指定范围或改动上下文，或明确要求审核整个项目时，建立项目自有前端代码、相关测试、配置和依赖声明的清单，再按模块分批审核，包括未改动代码；不要求 Git 差异。

先选择范围，再收集差异。仅指定文件或目录表示全量审核该范围；路径与明确改动请求同时出现时，仅增量审核该路径的改动。未限定的调用即使存在 Git 改动也默认全项目审核。开始审核时说明选定模式和目标范围。修改后自动委托审核时，显式传入本次改动范围，避免无范围调用触发全项目审核。

默认排除依赖目录、构建产物、缓存、生成文件和第三方代码，并记录排除项。保持前端职责边界，不宣称完成后端专项审核。目标不存在或范围内无相关文件时，明确说明，不替换为其他范围。

跨批次合并同根因发现。报告记录**审核模式、目标范围、已审核文件或模块、排除项、未覆盖文件或模块、完成状态及验证命令和结果**。受上下文或执行预算限制时，标记部分完成并列出剩余模块，不宣称已完成全项目覆盖。为理解上下文而读取调用方或执行全项目 lint/类型检查，不计为完成这些文件的人工审核。

改动审核保留合并建议；指定范围和全项目审核使用风险评估（低 / 中 / 高，并标明阻塞问题），不宣称合并就绪。保留严重程度、证据要求和报告文件命名。除非用户明确要求修复，否则仅输出报告。

## 用途

识别前端代码中的客户端安全风险，并给出可执行修复建议。

## 流程

1. 先确认审查面：用户输入、动态 HTML、URL 跳转、认证态、RBAC、文件上传、支付/删除等敏感操作、第三方脚本和依赖。
2. 搜索高危模式：`dangerouslySetInnerHTML`、`v-html`、`innerHTML`、`document.write`、动态 script、未校验 redirect、明文 token。
3. 按风险类型审查：XSS、CSP、敏感数据、CSRF、依赖、输入校验、文件上传、开放重定向、认证授权和第三方脚本。
4. 用边界模型判断责任：客户端只能改善体验和减少误用，鉴权、授权、上传信任和敏感操作必须由服务端最终裁决。
5. 高危问题标记为阻塞合并；前端校验只能改善体验，不能作为唯一安全边界。
6. 输出分级安全报告；报告格式见 [references/report-template.md](references/report-template.md)。

## 详细参考

- 需要 XSS、CSP、敏感数据、CSRF、依赖和输入校验细节时，加载 [references/security-checklist.md](references/security-checklist.md)。
- 撰写安全审查报告时，加载 [references/report-template.md](references/report-template.md)。

## 约束

- 不要为了方便开发而绕过安全机制。
- 不要依赖前端校验作为唯一安全防线。
- 不要信任任何来自客户端的数据。
- 发现高危问题时必须标记为阻塞合并。
- 与通用代码质量 review 分工：本 skill 关注威胁、攻击面和数据泄露。
- 不把依赖审计结果机械等同为可利用漏洞；需要结合运行路径、暴露面和修复成本判断。
- 不把隐藏按钮、前端路由守卫或本地角色字段当作授权边界；API、SSR loader、server action 和敏感操作必须有服务端裁决。

## 预期输出

输出 CRITICAL/HIGH/MEDIUM/LOW 分级安全审查报告，每个问题关联具体文件和行号，给出修复建议；报告保存为 `reports/security-review-YYYY-MM-DD-HHmmss.md`。
