Skip to content

服务端安全规约

1. 总体原则

1.1 安全目标

  • 保证数据:机密性、完整性、可用性(CIA)
  • 默认不信任任何请求(Zero Trust)
  • 所有输入都是不可信的
  • 安全优先于功能便利

1.2 基本原则

  • 最小权限原则(Least Privilege)
  • 防御纵深(Defense in Depth)
  • 不依赖前端做安全校验
  • 安全与业务解耦

2. 身份认证(Authentication)

2.1 登录认证规范

  • 必须使用 HTTPS

  • 禁止明文传输密码

  • 密码必须:

    • 使用 bcrypt / scrypt / argon2 哈希
    • 不可逆
    • 带 salt
  • 禁止存储明文密码

2.2 Token 规范

  • 使用 JWT / Session Token

  • Token 必须:

    • 有过期时间(exp)
    • 可刷新
    • 绑定用户 ID
  • 敏感操作必须二次验证

2.3 多因素认证(可选)

  • 高风险操作:修改密码、提现、删除数据
  • 推荐:短信 / 邮件 / TOTP

3. 权限控制(Authorization)

3.1 权限模型

推荐模型:

  • RBAC(角色权限)
  • 或 RBAC + 数据权限

3.2 鉴权原则

  • 每个 API 必须校验权限
  • 禁止通过前端控制权限
  • 后端统一鉴权中间件

示例:

text
/user/delete  -> admin role
/order/view   -> owner only

4. 输入校验(Input Validation)

4.1 基本要求

  • 所有参数必须校验:

    • 类型
    • 长度
    • 范围
    • 格式
  • 不信任任何外部输入

4.2 防注入

防止:

  • SQL 注入
  • 命令注入
  • XSS
  • JSON 注入

规范:

  • 使用预编译 SQL
  • 禁止拼接 SQL 字符串
  • HTML 输出必须转义

5. 数据安全

5.1 敏感数据保护

敏感字段:

  • 密码
  • 身份证
  • 手机号
  • 银行卡
  • Token / Secret

规范:

  • 数据库存储加密(AES)
  • 返回接口必须脱敏

示例:

text
138****1234

5.2 日志安全

  • 日志禁止打印:

    • 密码
    • Token
    • 身份证
    • 银行卡号
  • 日志需分级:

    • INFO
    • WARN
    • ERROR

6. 接口安全

6.1 防重放攻击

  • 使用:

    • timestamp
    • nonce
    • 签名(sign)

6.2 防刷与限流

  • IP 限流
  • 用户限流
  • 接口限流

示例:

text
10 req/s/user

6.3 接口幂等性

  • 支付 / 创建订单必须幂等

  • 使用:

    • 幂等 ID
    • 去重表

7. 文件与上传安全

  • 限制文件大小
  • 校验文件类型
  • 重命名文件
  • 禁止执行权限
  • 文件存储隔离

8. 配置与密钥管理

8.1 配置规范

  • 密钥不得写入代码仓库

  • 使用环境变量或配置中心

  • 区分环境:

    • dev
    • test
    • prod

8.2 Key 管理

  • 定期轮换
  • 权限最小化
  • 不共用 Key

9. 网络与部署安全

  • 禁止暴露数据库端口公网访问
  • 内网通信
  • 使用防火墙
  • 安全组限制 IP

10. 错误与异常处理

  • 不返回堆栈信息
  • 不暴露系统结构
  • 错误信息统一格式
  • 对外返回业务错误码

11. 第三方依赖安全

  • 定期升级依赖库
  • 使用漏洞扫描工具(SCA)
  • 禁止使用未知来源包

12. 审计与监控

  • 登录日志
  • 操作日志
  • 异常行为监控
  • 告警机制

13. 常见攻击防御清单

攻击类型防御措施
SQL 注入预编译 SQL
XSS输出转义
CSRFToken 校验
暴力破解限流
重放攻击nonce+timestamp
文件木马类型校验

14. 安全测试

  • 必须做:

    • 单元测试
    • 接口安全测试
  • 建议:

    • 渗透测试
    • 漏洞扫描

15. 安全事件响应

  • 发现漏洞立即封禁接口
  • 记录事件
  • 复盘
  • 修复
  • 更新规范

16. 核心安全红线(必须遵守)

❌ 禁止:

  • 明文密码
  • 硬编码密钥
  • 拼接 SQL
  • 返回敏感字段
  • 暴露服务器信息
  • 关闭鉴权调试接口

17. 推荐安全组件

  • HTTPS
  • WAF
  • API Gateway
  • OAuth2 / JWT
  • Rate Limiter
  • Vault / KMS