Security design
Skill lzx-Bill/Project-Factory-Core/.agents/skills/security-design
Docs-first project incubation with 34 composable AI Agent skills—from idea and requirements to architecture, acceptance, and implementation handoff.
npx -y skills add lzx-Bill/Project-Factory-Core --skill security-designAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 22 days oldThe repository was created 22 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Use when designing security architecture for a project — "security design", "authentication", "authorization", "access control", "data encryption", "security audit", "安全设计", "认证授权", "数据安全". This skill designs authentication/authorization systems, defines input validation rules, specifies data encryption requirements, and identifies security risks. Use after architecture-decisions and before delivery-planning.
SKILL.md
8.5 KB, ~3.0k tokens by cl100k_base, as published. Nobody here has run it
Security Design
用于设计项目安全架构。
When to Use
- 需要设计认证/授权系统
- 需要定义输入校验规则
- 需要考虑数据加密和敏感信息保护
- 需要识别安全风险并制定缓解措施
- 需要确保符合安全合规要求
NOT When to Use
- 纯本地应用,无敏感数据
- CLI 工具,不涉及安全威胁
- 已有完整安全设计,只需实现
Input
| 来源 | 内容 |
|---|---|
| system-design.md | 架构和模块划分 |
| user-stories.md | 用户角色和使用场景 |
| constraints.md | 安全相关约束 |
| scope.md | 功能范围 |
Output Schema
| 文件 | 类型 | 说明 |
|---|---|---|
wiki/03-architecture/security.md | 安全设计 | 认证/授权/加密/校验规范 |
Minimum Viable Output
- 认证方案(有无认证、方式)
- 授权规则概要(角色/权限)
- 输入校验关键点(≥3 项)
- 敏感数据清单和保护措施
Complete Output
- 完整安全设计,含:
- 认证方案详细设计
- 授权模型(RBAC/ABAC/其他)
- 会话管理策略
- 数据加密方案
- 输入校验完整规则
- 输出编码规范
- 敏感信息处理
- 安全风险登记册
- 安全测试用例
Dependencies
| 类型 | 说明 |
|---|---|
| 前置 | architecture-decisions(架构已定)、requirements-spec(用户角色已定) |
| 后置 | data-api-design(API 安全契约)、delivery-planning(安全任务拆分) |
| 依赖读取 | system-design.md、user-stories.md、constraints.md |
Procedure
Phase 1: 理解上下文
- 读取
system-design.md→ 确定模块划分和信任边界 - 读取
user-stories.md→ 确定用户角色和使用场景 - 读取
constraints.md→ 确定安全相关约束(合规要求、数据敏感性) - 识别资产:哪些是敏感数据需要保护
Phase 2: 认证方案设计
## 认证方案
| 问题 | 答案 |
|------|------|
| 是否需要认证? | 是/否 |
| 认证方式? | 用户名密码/OAuth/Token/API Key/生物识别 |
| MFA/2FA? | 是否需要多因素认证(TOTP/短信/邮件/硬件令牌) |
| 会话管理? | 无状态 JWT / 有状态 Session |
| 会话有效期? | Access Token X 分钟,Refresh Token Y 天 |
| 会话安全属性? | Session Fixation 防护、会话超时、并发登录限制 |
### Phase 3: 授权模型设计
```markdown
## 授权模型
### 角色定义
| 角色 | 描述 | 权限 |
|------|------|------|
| 管理员 | 系统管理 | CRUD 所有资源 |
| 用户 | 普通用户 | CRUD 自己的资源 |
| 访客 | 未认证 | 只读公开资源 |
### 权限矩阵
| 资源 | 管理员 | 用户 | 访客 |
|------|--------|------|------|
| /api/users | CRUD | R(own) | - |
| /api/posts | CRUD | CRUD(own) | R(public) |
RBAC/ABAC 选择
RBAC: 适合角色固定、权限相对静态的场景
ABAC: 适合需要细粒度、动态权限的场景
Phase 4: 输入校验规则
## 输入校验
### 通用规则
| 字段类型 | 校验规则 |
|---------|---------|
| 字符串 | 长度限制、禁止 HTML/JS |
| 邮箱 | 格式校验、正则 |
| 密码 | 最小长度、复杂度要求 |
| 数字 | 范围限制、最大值 |
| UUID | 格式校验、存在性检查 |
### SQL 注入防护
- [ ] 使用参数化查询
- [ ] 禁止字符串拼接 SQL
- [ ] 限制特殊字符
### XSS 防护
- [ ] 输出编码(HTML/URL/JSON)
- [ ] Content-Type 正确设置
- [ ] CSP 配置
### 命令注入防护
- [ ] 不使用用户输入执行系统命令
- [ ] 如需执行,使用白名单
### CSRF 防护
- [ ] 所有状态变更请求使用 CSRF Token(POST/PUT/DELETE)
- [ ] 同源策略(Origin header 验证)
- [ ] SameSite Cookie 设置为 Strict 或 Lax
### SSRF 防护
- [ ] URL 验证:禁止内网 IP 地址(10.x.x.x, 172.16-31.x.x, 192.168.x.x)
- [ ] DNS Rebinding 防护:延迟 DNS 解析,验证解析后的 IP
- [ ] 白名单:仅允许访问预定义的外部服务域名
### IDOR 防护
- [ ] 所有资源访问使用间接引用(间接对象引用映射),禁止直接暴露数据库 ID
- [ ] 水平越权检查:用户访问资源前验证所有权
- [ ] 垂直越权检查:权限级别验证
### XXE 防护
- [ ] XML 解析禁用外部实体(`libxml_disable_entity_loader` 或等价配置)
- [ ] 使用 JSON 替代 XML 作为数据交换格式
### 业务逻辑漏洞防护
- [ ] 认证失败锁定:连续 5 次失败后锁定 30 分钟
- [ ] 验证码/OTP 有效期限制(≤ 5 分钟)
- [ ] 频率限制:单 IP/单用户操作频率上限
- [ ] 数据一致性校验:关键操作前验证业务规则
Phase 5: 数据安全
## 数据安全
### 敏感数据清单
| 数据类型 | 示例 | 敏感等级 | 保护措施 |
|---------|------|---------|---------|
| 密码 | 用户密码 | 🔴 高 | Bcrypt/Argon2 哈希 |
| API Key | 第三方密钥 | 🔴 高 | 加密存储、环境变量 |
| 个人隐私 | 邮箱、手机号 | 🟡 中 | 脱敏展示、访问控制 |
| 公开数据 | 文章内容 | 🟢 低 | 无需特殊保护 |
### 加密方案
| 场景 | 算法 | 说明 |
|------|------|------|
| 密码存储 | Argon2id(首选)/ Bcrypt(备选) | 慢哈希,防 GPU/ASIC 暴力破解 |
| 传输加密 | TLS 1.3(强制),TLS 1.2(最小兼容) | 禁止 TLS 1.0/1.1 |
| 敏感文件 | AES-256-GCM | 本地加密存储 |
Phase 6: 安全风险登记
## 安全风险登记
| ID | 风险描述 | 威胁来源 | 可能性 | 影响 | 缓解措施 |
|----|---------|---------|--------|------|---------|
| S1 | SQL 注入 | 用户输入 | 高 | 高 | 参数化查询 |
| S2 | 密码泄露 | 攻击者 | 中 | 高 | 强哈希、2FA |
| S3 | XSS 攻击 | 恶意脚本 | 高 | 中 | 输出编码、CSP |
Phase 7: 安全测试用例
## 安全测试用例
| ID | 测试场景 | 预期结果 |
|----|---------|---------|
| ST1 | SQL 注入 payload `' OR '1'='1` | 被拦截或转义 |
| ST2 | XSS payload `<script>alert(1)</script>` | 被转义,不执行 |
| ST3 | CSRF Token 缺失或无效提交状态变更 | 请求被拒绝 |
| ST4 | JWT Token 过期后访问受保护 API | 返回 401 |
| ST5 | JWT Token 刷新流程(过期前刷新) | 返回新 Token |
| ST6 | 低权限用户访问高权限接口(垂直越权) | 返回 403 |
| ST7 | 用户 A 访问用户 B 的私有资源(水平越权) | 返回 403 或 404 |
| ST8 | 密码连续 5 次错误 | 账户锁定 30 分钟 |
| ST9 | API 请求超过频率限制 | 返回 429,触发限流 |
| ST10 | SSRF payload `http://169.254.169.254/` | 请求被拒绝或超时 |
Phase 8: 隐私合规(如适用)
## 隐私合规
| 法规 | 适用场景 | 关键要求 |
|------|---------|---------|
| GDPR(欧盟) | 处理欧盟用户数据 | 数据删除权、数据保留期限、跨境传输限制 |
| CCPA(加州) | 处理加州居民数据 | 知情权、删除权、不歧视 |
| PIPL(中国) | 处理中国用户数据 | 数据本地化、同意授权、跨境传输安全评估 |
**数据保留策略**:
- 用户数据:保留至用户主动删除
- 日志数据:保留 ≤ 90 天(可配置)
- 审计日志:保留 ≥ 1 年
Target Pages
<项目根目录>/wiki/03-architecture/security.md
Changelog
| 日期 | 变更 | 原因 |
|---|---|---|
| 2026-04-30 | 修复:Phase 2 认证方案新增 MFA/2FA 和会话安全属性;Phase 3 加密方案标注 Argon2id 首选/Bcrypt 备选,TLS 1.3 强制 + 1.2 最小兼容;Phase 4 输入校验新增 CSRF/SSRF/IDOR/XXE/业务逻辑防护;Phase 7 测试用例新增 ST3-ST10(CSRF/JWT/越权/限流/SSRF);Phase 8 新增隐私合规章节(GDPR/CCPA/PIPL) | OWASP Top 10 覆盖不完整、密码哈希优先级未标注、TLS 版本策略缺失、认证缺 MFA、会话管理缺安全属性、测试用例不足 |
| 2026-04-30 | 新建 skill | 安全设计是架构重要维度,之前缺失 |