向第三方后端(Cashify API)发送数据时的防护方案咨询
解决Cashify API请求拦截篡改的方案
核心思路:规避明文传输风险,同时无需直接同步加密密钥
以下是几个可落地的方案:
1. 使用HMAC请求签名(推荐)
这是最常用的防篡改方案,无需同步加密密钥,仅需双方离线安全共享一个密钥字符串(比如通过加密企业邮件、线下密钥交换)。
- 实现步骤:
- 把请求中的所有参数(新品、旧品详情)按固定规则排序(比如按参数名的字母顺序),拼接成统一格式的字符串
- 用共享密钥通过HMAC-SHA256算法生成签名
- 将签名放在自定义请求头(如
X-Cashify-Signature)中随请求一起发送 - Cashify后端拿到请求后,用同样的排序规则、密钥和算法重新生成签名,与请求头中的签名比对:一致则处理请求,不一致直接拒绝
- 代码示例(Node.js):
const crypto = require('crypto'); const sharedSecret = '你的离线共享密钥'; // 整理并排序请求参数 const requestParams = { newProductId: 'NP-2024-001', oldProductBrand: 'Apple', oldProductModel: 'iPhone 13', oldProductCondition: 'good' }; const sortedParamStr = Object.keys(requestParams).sort().map(key => `${key}=${requestParams[key]}`).join('&'); // 生成HMAC签名 const signature = crypto.createHmac('sha256', sharedSecret) .update(sortedParamStr) .digest('hex'); // 携带签名发送请求 const requestHeaders = { 'X-Cashify-Signature': signature, 'Content-Type': 'application/json' };
2. 启用TLS双向认证
如果双方服务都支持,开启双向TLS认证:
- 你需要向Cashify提供客户端证书,Cashify同步给你他们的服务端证书
- 发送请求时,客户端携带自身证书,服务端验证客户端身份的同时,TLS协议会加密整个请求体,中间拦截者无法篡改或读取明文数据
- 这种方式无需额外处理请求参数,完全依赖传输层的安全机制
3. 请求体哈希校验结合签名
如果担心参数排序的复杂度,可以直接对整个请求体做哈希校验:
- 将请求体转为标准JSON字符串(注意去除多余空格、换行,保证格式统一)
- 对JSON字符串生成SHA256哈希,再用共享密钥做HMAC签名
- Cashify端拿到请求体后,按同样流程生成哈希和签名,比对一致才处理
内容的提问来源于stack exchange,提问作者Souvik Banerjee
相关产品推荐
相关产品推荐

