SuperYan - 签名保密
https://www.hblyan.com/tag/%E7%AD%BE%E5%90%8D%E4%BF%9D%E5%AF%86/
-
【解决方案】 信息传输过程中是否对信息进行数字签名等防护处理
https://www.hblyan.com/archives/150.html
2023-07-13T13:01:00+08:00
背景:未采取技术手段对信息传输过程中的信息进行防护处理。(查看信息传输过程中是否对信息进行数字签名等防护处理。方案:对请求参数进行HmacSHA256 获取hash 后写入 header中,方便后端进行参数校验应用:传输加密axios 统一封装 参数签名对requestbody 参数进行签名const secretKey = 'secretkey';//用于加密的秘钥
setApiDefaultConfig({
//axios 用于转换 request 的方法
transformRequest: [(data, headers) => {
headers['X-Signature'] = CryptoJS.HmacSHA256(JSON.stringify(data),secretKey)
// axios默认是Request Payload格式,加了transformRequest会默认变成form Data格式,需要自己再转一下变回Request Payload,我在这里 再默认将他转为 json格式,这里是个小坑 需要注意一下
headers['Content-Type'] = 'application/json;charset=UTF-8'
return JSON.stringify(data);
}]
})校验签名保证传参过程中不被篡改,实际使用 加密前的参数 进行同样的 加密过程 比较签名即可
//解密参数 生成签名
const calculatedSignature = crypto.HmacSHA256(JSON.stringify(data), secretKey).toString();
if (calculatedSignature === header中携带的签名) {
console.log('签名验证通过');
} else {
console.log('签名验证失败');
}