# Security

> 系统安全规范

- Skill: `bage2014/security` (Agent Skill)
- Install (CLI): `npx skillmds@latest add bage2014/security`
- Raw SKILL.md: https://api.skillmd.com/api/skills/bage2014/security/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Security
- Author: bage2014 (https://skillmd.com/u/bage2014)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/bage2014/security

---

# 系统安全规范

## 1. 技能概述

本技能提供了家族树应用的系统安全规范，包括认证与授权、数据安全、网络安全、安全监控等方面。通过本规范，开发者可以构建一个安全可靠的系统，保护用户数据和系统资源。

## 2. 安全设计原则

### 2.1 核心原则
- **最小权限原则**：用户和系统组件只拥有完成任务所需的最小权限
- **防御纵深**：多层次安全防护，即使一层被突破，还有其他层保护
- **安全默认配置**：系统默认配置应该是安全的
- **安全开发生命周期**：在整个开发周期中考虑安全
- **安全意识**：所有开发者都应该具备安全意识

### 2.2 安全威胁模型
- **认证攻击**：密码破解、钓鱼、会话劫持
- **授权攻击**：权限提升、越权访问
- **数据攻击**：数据泄露、数据篡改、SQL注入
- **网络攻击**：中间人攻击、DDoS攻击
- **代码攻击**：XSS、CSRF、代码注入
- **系统攻击**：服务器入侵、恶意软件

## 3. 认证与授权

### 3.1 JWT认证

#### 3.1.1 认证流程
1. 用户登录，提供邮箱和密码
2. 服务器验证用户凭据
3. 服务器生成JWT令牌
4. 服务器将JWT令牌返回给客户端
5. 客户端存储JWT令牌
6. 客户端在后续请求中携带JWT令牌
7. 服务器验证JWT令牌
8. 服务器处理请求

#### 3.1.2 JWT配置
```java
// JwtUtils.java
public class JwtUtils {
    private static final String SECRET_KEY = "FamilytreeSecretKey2025AtLeast32Characters";
    private static final long EXPIRATION_TIME = 86400000; // 24小时
    
    public static String generateToken(String email) {
        Date now = new Date();
        Date expiration = new Date(now.getTime() + EXPIRATION_TIME);
        
        return Jwts.builder()
                .setSubject(email)
                .setIssuedAt(now)
                .setExpiration(expiration)
                .signWith(SignatureAlgorithm.HS512, SECRET_KEY)
                .compact();
    }
    
    public static String getEmailFromToken(String token) {
        return Jwts.parser()
                .setSigningKey(SECRET_KEY)
                .parseClaimsJws(token)
                .getBody()
                .getSubject();
    }
    
    public static boolean validateToken(String token) {
        try {
            Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token);
            return true;
        } catch (Exception e) {
            return false;
        }
    }
}
```

#### 3.1.3 安全最佳实践
- 使用强密钥：密钥长度至少32字符
- 设置合理的过期时间：根据业务需求设置
- 使用HTTPS传输：防止令牌被窃取
- 存储令牌安全：客户端使用localStorage或cookie
- 令牌刷新机制：实现令牌自动刷新

### 3.2 密码安全

#### 3.2.1 密码存储
- 使用BCrypt加密存储密码
- 密码复杂度要求：长度至少8位，包含大小写字母、数字和特殊字符
- 密码历史记录：防止重复使用旧密码
- 密码重置：安全的密码重置流程

#### 3.2.2 代码示例
```java
// UserService.java
public class UserService {
    public User register(RegisterRequest request) {
        // 密码验证
        if (!isValidPassword(request.getPassword())) {
            throw new IllegalArgumentException("密码不符合要求");
        }
        
        // 密码加密
        String encryptedPassword = passwordEncoder.encode(request.getPassword());
        
        // 创建用户
        User user = new User();
        user.setEmail(request.getEmail());
        user.setPassword(encryptedPassword);
        user.setNickname(request.getNickname());
        
        return userRepository.save(user);
    }
    
    private boolean isValidPassword(String password) {
        // 密码复杂度验证
        return password.length() >= 8 && 
               password.matches("^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]$*");
    }
}
```

### 3.3 基于角色的访问控制（RBAC）

#### 3.3.1 角色定义
- **ADMIN**：管理员，拥有所有权限
- **MEMBER**：成员，拥有基本操作权限
- **VIEWER**：查看者，只有查看权限

#### 3.3.2 权限配置
```java
// SecurityConfig.java
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .csrf().disable()
            .authorizeRequests()
            .antMatchers("/api/auth/**").permitAll()
            .antMatchers("/api/admin/**").hasRole("ADMIN")
            .antMatchers("/api/**").authenticated()
            .and()
            .addFilterBefore(new JwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);
    }
}
```

## 4. 数据安全

### 4.1 数据加密

#### 4.1.1 传输加密
- 使用HTTPS协议：所有通信使用HTTPS
- 配置TLS 1.2+：使用最新的TLS版本
- 证书管理：使用可信的SSL证书

#### 4.1.2 存储加密
- 敏感数据加密：如身份证号、电话号码等
- 数据库加密：使用数据库加密功能
- 配置文件加密：敏感配置信息加密

### 4.2 数据验证

#### 4.2.1 输入验证
- 前端验证：客户端表单验证
- 后端验证：服务器端参数验证
- 使用@Valid注解：Spring Boot参数验证

#### 4.2.2 代码示例
```java
// RegisterRequest.java
public class RegisterRequest {
    @Email(message = "邮箱格式不正确")
    @NotNull(message = "邮箱不能为空")
    private String email;
    
    @Size(min = 8, message = "密码长度至少8位")
    @Pattern(regexp = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]$", 
             message = "密码必须包含大小写字母、数字和特殊字符")
    private String password;
    
    @NotNull(message = "昵称不能为空")
    private String nickname;
    
    // getters and setters
}
```

### 4.3 数据备份与恢复

#### 4.3.1 备份策略
- 定期备份：每日全量备份，每小时增量备份
- 备份存储：异地存储备份数据
- 备份验证：定期验证备份数据的可用性

#### 4.3.2 恢复策略
- 灾难恢复计划：制定详细的恢复计划
- 恢复测试：定期进行恢复测试
- 恢复时间目标：设定合理的恢复时间目标

## 5. 网络安全

### 5.1 网络防护

#### 5.1.1 防火墙配置
- 入站规则：只开放必要的端口
- 出站规则：限制不必要的出站连接
- DDoS防护：启用DDoS防护

#### 5.1.2 网络隔离
- 生产环境与开发环境隔离
- 内部网络与外部网络隔离
- 敏感数据网络隔离

### 5.2 API安全

#### 5.2.1 API防护
- 速率限制：防止API滥用
- 输入验证：验证所有API输入
- 输出编码：防止XSS攻击
- CORS配置：正确配置CORS策略

#### 5.2.2 API监控
- 异常请求监控：检测异常的API请求
- 访问频率监控：检测异常的访问频率
- 错误率监控：监控API错误率

## 6. 安全监控与审计

### 6.1 日志监控

#### 6.1.1 日志记录
- 安全事件日志：记录所有安全相关事件
- 访问日志：记录所有API访问
- 错误日志：记录所有错误
- 操作日志：记录所有用户操作

#### 6.1.2 日志分析
- 实时监控：实时分析日志
- 异常检测：检测异常行为
- 告警机制：设置合理的告警阈值

### 6.2 安全审计

#### 6.2.1 定期审计
- 代码审计：定期进行代码安全审计
- 配置审计：定期检查系统配置
- 权限审计：定期检查权限配置

#### 6.2.2 漏洞扫描
- 定期扫描：定期进行漏洞扫描
- 第三方依赖扫描：扫描第三方依赖的漏洞
- 修复跟踪：跟踪漏洞修复情况

## 7. 安全开发实践

### 7.1 代码安全

#### 7.1.1 常见漏洞防护
- SQL注入：使用参数化查询
- XSS：输出编码，使用Content-Security-Policy
- CSRF：使用CSRF令牌
- 命令注入：避免使用拼接命令
- 敏感信息泄露：避免硬编码敏感信息

#### 7.1.2 安全编码规范
- 使用安全的库和框架
- 避免使用已弃用的API
- 定期更新依赖
- 代码审查：进行安全代码审查

### 7.2 环境安全

#### 7.2.1 开发环境
- 开发环境与生产环境隔离
- 开发环境使用测试数据
- 开发环境禁用生产级别的安全措施

#### 7.2.2 测试环境
- 测试环境与生产环境相似
- 测试环境使用模拟数据
- 测试环境启用所有安全措施

#### 7.2.3 生产环境
- 最小化安装：只安装必要的软件
- 定期更新：定期更新系统和软件
- 禁用不必要的服务：禁用不需要的服务
- 强化配置：强化系统配置

## 8. 安全应急响应

### 8.1 应急响应计划

#### 8.1.1 响应团队
- 成立安全应急响应团队
- 明确团队成员职责
- 建立沟通机制

#### 8.1.2 响应流程
1. 检测：发现安全事件
2. 分析：分析事件影响范围
3. 遏制：采取措施遏制事件
4. 消除：消除安全威胁
5. 恢复：恢复系统正常运行
6. 总结：总结经验教训

### 8.2 安全事件处理

#### 8.2.1 常见安全事件
- 数据泄露：用户数据被泄露
- 系统入侵：服务器被入侵
- DDoS攻击：系统遭受DDoS攻击
- 恶意代码：系统被植入恶意代码

#### 8.2.2 处理流程
- 立即响应：发现事件后立即响应
- 隔离受影响系统：隔离受影响的系统
- 收集证据：收集相关证据
- 实施修复：修复安全漏洞
- 恢复系统：恢复系统正常运行
- 通知相关方：通知相关用户和监管机构

## 9. 第三方安全

### 9.1 依赖管理

#### 9.1.1 依赖评估
- 评估第三方依赖的安全性
- 检查依赖的漏洞历史
- 选择安全的依赖版本

#### 9.1.2 依赖更新
- 定期更新依赖：定期更新到最新版本
- 安全补丁：及时应用安全补丁
- 依赖审计：定期审计依赖

### 9.2 第三方服务安全

#### 9.2.1 服务评估
- 评估第三方服务的安全性
- 检查服务的安全认证
- 审查服务的隐私政策

#### 9.2.2 集成安全
- 安全的API集成：使用安全的方式集成API
- 数据传输加密：加密传输数据
- 访问控制：限制第三方服务的访问权限

## 10. 安全培训与意识

### 10.1 开发者培训

#### 10.1.1 安全培训
- 定期进行安全培训
- 学习最新的安全威胁
- 实践安全编码技巧

#### 10.1.2 安全意识
- 培养安全意识
- 鼓励安全报告
- 建立安全奖励机制

### 10.2 用户安全

#### 10.2.1 用户教育
- 提供安全使用指南
- 教育用户识别钓鱼攻击
- 指导用户设置强密码

#### 10.2.2 用户支持
- 提供安全支持渠道
- 及时响应安全问题
- 建立安全事件通知机制

## 11. 合规性

### 11.1 数据保护法规

#### 11.1.1 法规要求
- GDPR：欧盟数据保护法规
- CCPA：加州消费者隐私法案
- 个人信息保护法：中国个人信息保护法

#### 11.1.2 合规措施
- 数据最小化：只收集必要的数据
- 数据主体权利：尊重用户的数据权利
- 数据处理记录：记录数据处理活动
- 数据保护影响评估：评估数据处理的影响

### 11.2 行业标准

#### 11.2.1 安全标准
- ISO 27001：信息安全管理体系
- OWASP Top 10：Web应用安全风险
- NIST Cybersecurity Framework：网络安全框架

#### 11.2.2 认证与合规
- 进行安全认证：如ISO 27001认证
- 定期进行安全评估：如渗透测试
- 保持合规性：定期更新合规措施

## 12. 安全检查清单

### 12.1 开发阶段
- [ ] 安全需求分析
- [ ] 威胁建模
- [ ] 安全编码规范
- [ ] 代码安全审查
- [ ] 依赖安全扫描

### 12.2 测试阶段
- [ ] 安全测试
- [ ] 渗透测试
- [ ] 漏洞扫描
- [ ] 安全功能测试
- [ ] 合规性测试

### 12.3 部署阶段
- [ ] 安全配置检查
- [ ] 防火墙配置
- [ ] SSL/TLS配置
- [ ] 访问控制配置
- [ ] 监控配置

### 12.4 运维阶段
- [ ] 定期安全审计
- [ ] 漏洞管理
- [ ] 安全事件监控
- [ ] 应急响应演练
- [ ] 安全更新管理

## 13. 总结

本安全规范提供了全面的系统安全指南，包括认证与授权、数据安全、网络安全、安全监控、安全开发实践、应急响应、第三方安全、安全培训和合规性等方面。通过遵循本规范，开发者可以构建一个安全可靠的家族树应用系统，保护用户数据和系统资源。

安全是一个持续的过程，需要不断地评估和改进。开发者应该保持警惕，关注最新的安全威胁和防护措施，确保系统的安全性。
