feat: add HTTP signature tools and fix independent HTTP send validation
CSS quality / css-quality (push) Has been cancelled

This commit is contained in:
hectorzhao
2026-09-15 15:58:29 +08:00
parent 18ecf8045f
commit c781313de5
23 changed files with 986 additions and 255 deletions
+19
View File
@@ -317,3 +317,22 @@ HTTP-FULL-B02:去除URL IPv6方括号后区分IP字面量与DNS,DNS失败转
- 时间戳窗口、nonce Redis 原子去重、租户/应用隔离、白名单、QPS 和日志脱敏保持。发送幂等使用的内部 bodyHash 保持,已有请求快照/计费/消息/队列均不迁移、不补投。Webhook 验签不变。
- 数据模型、基础设施配置和 Gateway 无改动。历史查询 startTime/endTime 能力保留;手册简化介绍不代表删除后台兼容参数。
- 验收:固定 POST/GET 向量、旧签名拒绝、末尾 LF/CRLF/字面反斜杠/正文空格与字段顺序篡改、缺失 rawBody、非空 GET、重放、权限与隔离;真实 HTTP/PG/Redis 验证以隔离数据和无发送请求完成,线上不创建短信或更改客户配置。两段 Node 示例从权威文档提取运行并与全部 HTTP 报文复算;公开页面三尺寸、目录/检索/下载及客户端共享入口验收。按精确提交标准 validate/preflight/prepare/deploy/verify。
## 2026-09-15 接口签名工具与完整链路复验(实施前设计)
本轮继续18ecf80的新签名规则,暂停旧候选发布,四项完成后统一测试部署。两端新增独立HTTP签名计算页,复用同一实现和既有登录边界。输入方法GET/POST、请求路径(不含query)、秒时间戳、nonce、AccessSecret及原始JSON正文;浏览器本地HMAC-SHA256计算,不调用后台计算接口,不存储秘密,不自动发送请求。支持HTTP测试站点,使用独立小型HMAC库,不依赖仅安全上下文可用的crypto.subtle。显示签名原文、UTF8字节数与签名,支持复制和清空;修改任一输入立即使旧结果失效。GET无正文及末尾LF;POST保留空白、换行和原始文本,不重新序列化。提供更新时间戳/nonce操作及明确失败提示。页面路由/client/http-signature、/admin/http-signature,菜单分别在短信基础配置和客户管理。无数据库迁移、无新增服务端权限/API。
运营端签名和引流报备弹窗统一使用同一三运营商列组件,保留通道、独立状态、原因、历史继承及失败反馈。当前源码已具有三列结构,先核对真实页面和部署资源;不将用户反馈直接认定为数据模型缺陷。客户端只隐藏新申请/重新申请企业认证按钮,审核进度与现有资料仍可查看,后台认证能力保留。
授权测试仅专用企业/应用、模拟通道和号码,必要配置限专用对象;覆盖四公开接口的缺失/类型/长度/时间/签名/nonce/权限/租户/幂等/分页错误,以及发送后的黑名单、验证码、频次、模板、签名和引流报备拦截。少量串行发送,核对真实PG、Redis、Gateway、回执、Webhook和计费;任何意外真实通道或持续积压立即停止。复用9月14日矩阵但按新规则重新执行,不沿用旧通过结论。验收后停用新测试应用/凭据并保留证据。用户已授权本轮代码提交、推送及测试部署;预生产不在范围。
### HTTP-0915-B01 上行查询号码格式校验
测试4665079真实API返回mobile=abc/1及accessNumber=<script>的200空集;补手机号1开头11位、接入号1至21位数字校验,非法400,复用MOBILE_INVALID/PARAMETER_INVALID。仅约束明确提供的过滤条件,省略不筛选,合法值继续精确匹配;无数据迁移和查询范围变化。
### HTTP-0915-B02 HTTP发送误依赖CMPP开关
真实测试企业HTTP enabled/sendEnabled=true、CMPP interfaceEnabled=false时,合法模板请求422,未创建短信。根因SendBatchEntryService.validateSendResources无条件读取interfaceEnabled,与需求HTTP客户接口第一版的独立开通矛盾。仅由内部HTTP_REQUEST_CONTEXT符号确认的HTTP请求传递httpRequest校验选项,再读取真实httpConfig.enabled/sendEnabled;普通客户端及CMPP路径保留原检查,企业认证、租户、应用状态及模板校验不变。没有数据库迁移和计费规则变化。须真实复验CMPP关闭HTTP送达、HTTP关闭拒绝及原CMPP拒绝回归。