Spring框架下跨接口响应与请求关联校验实现方案咨询
跨接口字符串一致性校验实现方案
以下方案完全符合「不使用数据库存储、前端无需同时回传新旧字符串」的约束要求。
场景1:允许使用Cookie的实现方案
- 后端响应
GET /initialise-string请求时,首先生成随机原始字符串S - 用仅服务端持有的密钥对S计算HMAC哈希值,得到不可伪造的签名sign
- 后端将sign存入带HttpOnly、Secure、SameSite属性的Cookie中返回给前端,同时将明文S返回给前端做业务处理
HttpOnly属性禁止前端JS读写该Cookie,从根源避免前端篡改签名
- 前端提交
POST /check-if-same-string请求时仅需传入修改后的字符串S',Cookie会自动随请求携带到后端 - 后端取出Cookie中的sign,用相同密钥对S'重新计算HMAC哈希,与原sign比对:匹配则S'与原始字符串一致,不匹配则被篡改。
场景2:不允许使用Cookie的实现方案
- 后端响应
GET /initialise-string请求时,生成随机原始字符串S - 用仅服务端持有的密钥对S计算HMAC哈希得到sign,将
明文S和sign两个字段同时返回给前端,也可直接拼接为S:sign的格式整体返回 - 前端仅需截取明文S做业务修改,提交
POST /check-if-same-string时,仅需要传入「修改后的字符串S' + 之前拿到的sign」即可,无需回传原始S - 后端收到请求后拆分出S'和sign,用相同密钥对S'重新计算HMAC哈希,与传入的sign比对:匹配则S'与原始字符串一致,不匹配则被篡改。
内容的提问来源于stack exchange,提问作者Emperor
相关产品推荐
相关产品推荐

