安全与合规

IM PaaS 的安全边界由四件事构成:AppSecret 不出服务端、请求签名防重放、回调验签与幂等、数据最小化与可删除。本页给出当前实现的安全能力、开发红线与上线检查项。

鉴权与签名​

链路凭据算法 / 窗口红线
Open APIApp-Key + App-Secretsha1(appSecret + nonce + timestamp);Timestamp ±300000ms;Nonce 8–64 字符且 5 分钟不可重放AppSecret 只能存在于业务服务端;禁止下发客户端
客户端连接用户 JWT(user.token.issue 签发)有效期 7 天;封禁/注销用户签发返回 1016Token 泄露可吊销/重新签发;不要在多用户间复用
Admin APIX-Admin-Secret控制台/运营后台专用仅内网或受控网络暴露;禁止进前端产物
回调secret + HMAC-SHA256hex(hmac_sha256(secret, timestamp + '.' + nonce + '.' + rawBody)) 小写必须验签 + 时间戳窗口 + eventId 幂等
三条常见安全事故

把 AppSecret 打进 Web/移动端包:任何人都能冒充你的服务端发消息、读用户。

回调不验签:攻击者可直接伪造 message.publish.before 放行或注入事件。

日志里打印完整 Token/Secret:日志系统往往比数据库更容易被导出。

传输与部署​

项要求
生产传输对外域名必须 HTTPS/WSS;回调 URL 生产环境强制 https
证书使用受信任 CA;需要固定根证书时参考 根证书与网络安全
密钥存储AppSecret/Admin-Secret/回调 secret 放密钥管理或环境变量;回调 secret 服务端加密存储、读取脱敏(只回末四位)
网络边界Admin API 与运维接口不对公网开放;客户端只需 API 域名 + WS 域名
时间同步服务器 NTP 同步;签名时间戳窗口仅 ±300 秒

数据最小化与隐私​

数据建议依据
消息正文按业务必要保留;敏感字段(身份证、银行卡)不要进消息体消息会落库并可被审计视图查询
用户资料IM 只存 name/avatarUrl 等最小字段;详细资料留在业务库用户信息托管
设备 token只存推送所需 token;注销/换绑及时清理每用户活跃 20 个,软删除保留历史
日志脱敏手机号/邮箱/Token;限制保留期审计与排障需要,但不能成为泄露源
删除请求用注销/删除接口 + 业务侧数据清理,双轨执行IM 与业务库是两个数据面

内容安全​

  • 敏感词 + 发送前同步回调 + 异步审核任务组成三道闸门,详见 内容审核拦截教程。
  • 审核拒绝会标记消息 moderation=blocked 并发送 message.blocked 系统通知;不会从历史中物理删除,合规删除请用 message.history.clean / message.history.delete。
  • 图片/语音/文件不参与文本敏感词,需要业务侧或同步回调自行审核。

上线安全检查清单​

  1. AppSecret / Admin-Secret 只存在于服务端,已在打包产物、前端源码、日志中检索确认无泄露。
  2. 所有 Open API 调用使用签名;Nonce 每次随机;服务器时间已同步。
  3. 回调已启用验签 + 时间戳窗口 + eventId 去重;接收端 5 秒内 ACK。
  4. 生产回调与 API 全部 HTTPS;证书链正确;必要时配置根证书。
  5. 管理后台/Admin API 不对公网开放,或经过强制鉴权与 IP 白名单。
  6. 敏感词、审核回调、封禁/注销流程已演练。
  7. 日志脱敏规则已生效;数据保留与删除流程有负责人。
  8. 限频与配额已配置;压测覆盖连接数与消息峰值。

相关页面​