08-安全规范.md 4.9 KB

08-安全规范

概述

本规范基于项目现有代码实现,规定了慢病APP后端系统的安全要求和实现标准。所有安全措施必须与现有代码逻辑保持一致,不得引入与当前实现冲突的安全机制。

认证与授权

认证机制

  • Token认证:采用基于Token的认证机制,使用UUID生成的32位无符号字符串作为Token。
  • Token存储:Token及相关信息存储在数据库t_user_token表中,每个用户仅维护一个有效Token。
  • Token有效期:Token有效期为72小时,过期后自动失效。
  • Token刷新:当Token剩余有效期小于24小时时,自动延长至72小时。
  • 认证方式
    • 首选:Authorization: Bearer <token> 标准HTTP头
    • 兼容:X-Tokentoken HTTP头
  • 认证拦截:所有API请求(除登录和文档相关路径外)均通过AuthInterceptor进行Token验证。

授权机制

  • 角色权限:基于用户角色进行权限控制,支持以下角色:
    • 系统管理员(SYS_ADMIN)
    • 医生(DOCTOR)
    • 患者(PATIENT)
    • 患者家属(PATIENT_FAMILY)
  • 角色存储:用户角色信息存储在t_user_info表的role字段,使用枚举类型PermissionGroup

登录流程

  • 微信登录:通过微信小程序授权码获取openid,结合角色信息完成用户注册/登录。
  • Token生成:登录成功后自动生成新的Token,覆盖旧Token。
  • 用户绑定:用户通过role + wx_openid唯一标识。

数据安全

敏感信息存储

  • 配置信息:微信小程序的appidsecret通过WeChatProperties类从配置文件加载。
  • 数据库密码:数据库连接密码在application.yml中明文配置。
  • Token信息:Token明文存储在数据库中。

数据传输

  • HTTPS配置:项目支持SSL证书配置(fullchain.pemprivkey.pem),但默认使用HTTP传输。
  • CORS配置:允许http://localhost:3000域名跨域访问,支持Credentials。

输入验证

参数校验

  • 框架校验:使用Spring Validation进行参数校验。
  • 异常处理:通过CustomExceptionHandler统一处理校验异常:
    • BindException:表单绑定校验异常
    • ConstraintViolationException:约束违反异常
  • 错误响应:校验失败时返回统一的错误格式,包含错误码和错误信息。

异常处理

统一异常处理

  • 全局处理:使用@RestControllerAdvice进行全局异常拦截。
  • 异常类型
    • 自定义异常(CustomException
    • 参数校验异常
    • 系统未知异常
  • 错误信息:异常信息通过统一的R.fail()格式返回,不暴露系统内部敏感信息。
  • 日志记录:系统异常记录详细错误日志。

日志安全

日志配置

  • 日志级别:使用SLF4J日志框架,根日志级别为INFO,应用包级别为DEBUG。
  • 敏感信息:日志中避免记录Token的完整内容,仅记录前8位字符。
  • 认证日志:记录认证成功、失败及Token过期等关键事件。

数据库安全

连接配置

  • 连接池:使用HikariCP连接池,配置最小空闲连接5,最大连接20。
  • 连接超时:连接超时时间30秒,空闲超时60秒。
  • SSL配置:数据库连接默认禁用SSL(useSSL=false)。

API安全

接口保护

  • 路径排除:以下路径不进行Token验证:
    • / (首页)
    • /get_openid (获取openid接口)
    • /v3/api-docs/** (API文档)
    • /swagger-ui/** (Swagger UI)
    • /doc.html (Knife4j文档)
    • /webjars/** (静态资源)
    • /favicon.ico

请求处理

  • OPTIONS请求:CORS预检请求直接放行,无需认证。
  • 用户上下文:认证通过后,将用户ID放入请求属性currentUserId,供后续业务逻辑使用。

安全配置

Spring Security配置

  • 项目未使用Spring Security框架,安全通过自定义拦截器实现。

MyBatis Plus配置

  • SQL日志:开发环境开启SQL语句打印,便于调试。
  • 字段映射:使用驼峰命名映射数据库字段。

部署安全

证书管理

  • SSL证书:支持PEM格式证书文件部署。
  • 证书路径:证书文件存储在classpath:cert/目录下。

监控与审计

安全事件监控

  • 认证失败:记录Token缺失、无效或过期的请求。
  • 异常监控:记录系统异常,便于安全分析。

合规要求

数据保护

  • 个人信息:妥善处理用户微信openid、昵称、头像等个人信息。
  • 数据最小化:仅收集必要的数据字段。

访问控制

  • 最小权限:用户仅能访问与自己角色相关的功能。
  • 会话管理:Token过期后自动失效,防止会话固定攻击。
  • d:\慢病APP\ChronicDiseaseApp\docs\DevRule\08-安全规范.md