Skip to content

接口安全规范

文档编号: SYS-INT-STD-002
版本: 1.0
日期: 2026-03-09
作者: 系统架构师
状态: ✅ 已评审


一、概述

1.1 文档目的

本文档定义System平台API接口的安全规范,确保接口通信的机密性、完整性和可用性,防止未授权访问和恶意攻击。

1.2 适用范围

适用于System平台所有API接口的安全设计和实现。

1.3 安全原则

  • 最小权限原则: 只授予必要的访问权限
  • 纵深防御原则: 多层安全机制防护
  • 安全默认原则: 默认启用安全机制
  • 失败安全原则: 出错时进入安全状态

二、认证机制

2.1 JWT认证

System平台采用JWT(JSON Web Token)进行身份认证。

2.1.1 Token结构

Authorization: Bearer <access_token>

2.1.2 Token组成

JWT由三部分组成,用.分隔:

header.payload.signature

Header示例:

json
{
  "alg": "HS256",
  "typ": "JWT"
}

Payload示例:

json
{
  "sub": "user_id",
  "username": "zhangsan",
  "roles": ["admin", "user"],
  "iat": 1709827200,
  "exp": 1709913600,
  "jti": "unique_token_id"
}

2.1.3 Token有效期

Token类型有效期说明
Access Token2小时用于接口访问认证
Refresh Token7天用于刷新Access Token

2.1.4 Token刷新机制

http
POST /api/v1/auth/refresh
Content-Type: application/json

{
  "refreshToken": "eyJhbGciOiJIUzI1NiIs..."
}

响应:

json
{
  "code": 200,
  "message": "success",
  "data": {
    "accessToken": "new_access_token",
    "refreshToken": "new_refresh_token",
    "expiresIn": 7200
  }
}

2.2 OAuth2.0集成(可选)

支持第三方OAuth2.0认证:

http
GET /api/v1/auth/oauth2/authorize?provider=wechat

支持的Provider:

  • 微信 (wechat)
  • 钉钉 (dingtalk)
  • 企业微信 (wecom)

三、请求签名

3.1 签名机制

对于敏感接口,采用HMAC-SHA256请求签名。

3.2 签名参数

参数说明示例
appId应用IDapp_123456
timestamp时间戳(毫秒)1709827200000
nonce随机字符串(16位)a1b2c3d4e5f6g7h8
signature签名hmac_sha256_signature

3.3 签名算法

Signature = HMAC-SHA256(
    appSecret,
    appId + timestamp + nonce + method + uri + body
)

签名步骤:

  1. 拼接签名字符串: appId={appId}&timestamp={timestamp}&nonce={nonce}&method={method}&uri={uri}&body={body}
  2. 使用HMAC-SHA256算法和appSecret进行签名
  3. 将签名结果转为Base64字符串

3.4 请求示例

http
POST /api/v1/payments
Content-Type: application/json
X-App-Id: app_123456
X-Timestamp: 1709827200000
X-Nonce: a1b2c3d4e5f6g7h8
X-Signature: hmac_sha256_signature

{
  "amount": 100.00,
  "currency": "CNY"
}

四、防重放攻击

4.1 时间戳校验

  • 请求时间戳与服务器时间差不得超过5分钟
  • 超时请求直接拒绝
java
// 伪代码
if (Math.abs(serverTime - requestTime) > 5 * 60 * 1000) {
    throw new RequestExpiredException();
}

4.2 Nonce机制

  • 每个请求必须携带唯一Nonce
  • 服务端缓存已使用的Nonce(5分钟)
  • 重复的Nonce直接拒绝
java
// 伪代码
if (nonceCache.contains(nonce)) {
    throw new DuplicateRequestException();
}
nonceCache.put(nonce, expireTime);

4.3 请求序列号(可选)

对于关键业务接口,使用递增序列号:

http
X-Request-Seq: 1001

五、限流策略

5.1 限流维度

维度限流规则说明
全局限流10000 QPS整个系统
接口限流1000 QPS单个接口
用户限流100 QPS单个用户
IP限流60 QPS单个IP

5.2 限流算法

采用令牌桶算法(Token Bucket):

容量: 100 tokens
速率: 10 tokens/second

5.3 限流响应

json
{
  "code": 429,
  "message": "请求过于频繁,请稍后重试",
  "data": {
    "retryAfter": 60
  }
}

5.4 限流Header

http
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1709827260

六、数据加密

6.1 传输加密

  • 强制HTTPS: 所有API必须使用HTTPS协议
  • TLS版本: 最低TLS 1.2,推荐TLS 1.3
  • 证书配置: 使用有效SSL证书,定期更新

6.2 敏感数据加密

6.2.1 请求加密(可选)

对于极高敏感数据,采用AES-256-GCM加密:

http
POST /api/v1/sensitive-data
Content-Type: application/json
X-Encryption: AES-256-GCM

{
  "encryptedData": "base64_encoded_encrypted_data",
  "iv": "base64_encoded_iv",
  "tag": "base64_encoded_auth_tag"
}

6.2.2 响应加密(可选)

json
{
  "code": 200,
  "message": "success",
  "data": {
    "encrypted": true,
    "encryptedData": "base64_encoded_encrypted_data",
    "iv": "base64_encoded_iv"
  }
}

6.3 字段级加密

敏感字段存储加密:

字段类型加密算法说明
手机号AES-256存储加密
身份证号AES-256存储加密
银行卡号AES-256存储加密,展示脱敏
密码BCrypt哈希存储

七、安全Header

7.1 必须的安全Header

Header说明
Strict-Transport-Securitymax-age=31536000; includeSubDomainsHSTS
X-Content-Type-Optionsnosniff防止MIME嗅探
X-Frame-OptionsDENY防止点击劫持
X-XSS-Protection1; mode=blockXSS防护
Content-Security-Policydefault-src 'self'CSP策略

7.2 CORS配置

Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, PATCH
Access-Control-Allow-Headers: Content-Type, Authorization, X-Request-ID
Access-Control-Allow-Credentials: true
Access-Control-Max-Age: 86400

八、输入验证

8.1 参数校验规则

参数类型校验规则示例
字符串长度、格式、特殊字符过滤@Length(max=100)
数值范围、精度@Range(min=0, max=100)
枚举值必须在枚举范围内@Enum(UserStatus.class)
日期格式、范围@DateTimeFormat(iso=ISO.DATE)
邮箱邮箱格式@Email
手机号手机号格式@Pattern(regexp="^1[3-9]\\d{9}$")

8.2 SQL注入防护

  • 使用参数化查询,禁止字符串拼接SQL
  • 使用ORM框架(MyBatis-Plus)
  • 输入过滤特殊字符

8.3 XSS防护

  • 输入过滤:过滤<script>, javascript:
  • 输出编码:HTML实体编码
  • Content-Type正确设置

九、日志审计

9.1 安全日志内容

字段说明示例
timestamp时间戳2024-03-09T10:00:00Z
userId用户ID1001
requestId请求IDreq-123456
clientIp客户端IP192.168.1.1
methodHTTP方法POST
uri请求URI/api/v1/users
status响应状态200
userAgent用户代理Mozilla/5.0...

9.2 敏感操作日志

以下操作必须记录安全日志:

  • 用户登录/登出
  • 密码修改
  • 权限变更
  • 敏感数据访问
  • 配置修改

9.3 日志存储

  • 安全日志独立存储
  • 保留期限:180天
  • 禁止修改和删除

十、安全测试

10.1 测试类型

测试类型工具频率
漏洞扫描OWASP ZAP每周
依赖扫描Snyk每次构建
渗透测试手动每季度
代码审计SonarQube每次提交

10.2 安全测试用例

  • 认证绕过测试
  • 权限提升测试
  • SQL注入测试
  • XSS攻击测试
  • CSRF攻击测试
  • 敏感信息泄露测试

十一、安全响应

11.1 安全事件分级

级别描述响应时间
P0严重安全漏洞1小时内
P1高危安全问题4小时内
P2中危安全问题24小时内
P3低危安全问题7天内

11.2 应急响应流程

  1. 发现安全事件
  2. 评估影响范围
  3. 遏制攻击扩散
  4. 修复安全漏洞
  5. 验证修复效果
  6. 复盘总结改进

十二、安全最佳实践

12.1 开发安全

  • 安全编码规范培训
  • 代码审查包含安全检查
  • 敏感信息不硬编码
  • 错误信息不泄露系统信息

12.2 部署安全

  • 生产环境配置检查
  • 敏感配置文件加密
  • 最小权限运行
  • 安全组/防火墙配置

12.3 运维安全

  • 定期安全扫描
  • 日志监控告警
  • 备份加密存储
  • 灾备演练

十三、相关文档


十四、评审记录

14.1 评审意见

序号评审项评审结果评审意见
1JWT认证机制✓ 通过认证方案合理,Token设计完善
2请求签名机制✓ 通过HMAC-SHA256算法安全可靠
3防重放攻击✓ 通过时间戳+Nonce机制有效
4限流策略✓ 通过多维度限流设计合理
5数据加密✓ 通过传输加密和字段加密完整

14.2 评审结论

评审结论: 通过

评审意见: 本文档建立了完善的接口安全规范,涵盖认证、签名、防重放、限流、加密等多个方面,安全措施全面,符合企业级应用安全要求。

14.3 签字确认

角色姓名签字日期意见
技术总监张总_______________2026-03-09同意
系统架构师李工_______________2026-03-09同意
安全工程师刘工_______________2026-03-09同意
后端架构师王工_______________2026-03-09同意

十五、修订记录

版本日期作者变更内容
1.02026-03-09系统架构师初始版本,建立接口安全规范

Released under the MIT License.