微信公众平台签名为什么需要加nonce参数?
微wx笑 2019-09-25【常见问题】 15 0关键字: 微信公众号 nonce
首先,并不是为了增加sign被猜出来的难度。
timestamp+nonce主要是为了防止重放攻击。
攻击者可能截获请求,然后反复发送请求(注意,并不是篡改),这时服务端校验签名是能够校验通过的。
服务端为了防止这种攻击,要求调用方:即使每次请求的其他参数相同,也要重新生成nonce和timestamp。如果timestamp和服务端的时间相差超过一定值,直接返回失败;如果两次请求使用的timestamp+nonce相同,就认为是重放攻击,直接返回失败。
微信公众平台签名为什么需要加nonce参数?
引用 okayan 的回答:
首先,并不是为了增加sign被猜出来的难度。 timestamp+nonce主要是为了防止重放攻击。 攻击者可能截获请求,然后反复发送请求(注意,并不是篡改),这时服务端校验签名是能够校验通过的。 服务端为了防止这种攻击,要求调用方:即使每次请求的其他参数相同,也要重新生成nonce和timestamp。如果timestamp和服务端的时间相差超过一定值,直接返回失败;如果两次请求使用的timestamp+nonce相同,就认为是重放攻击,直接返回失败。
在官方文档中没有找到关于 nonce 参数的详细解释,只在 接入指南 中提到是随机数。
官方搜索结果如下:
第二步:验证消息的确来自微信服务器
signature结合了开发者填写的token参数和请求中的timestamp参数、nonce
附录1-JS-SDK使用权限签名算法
nonce_str 否 是 随机字符串,由开发者设置传入, 加强安全性(若不填写可能被重放请求
1 获取自身的开票平台识别码
发票具体内容card_ext为Object,包括以下内容:参数 类型 是否必填 描述 nonce_str
红包预下单接口
接口调用说明请求参数说明参数 字段 是否必须 示例值 类型 说明 随机字符串 nonce_str
timestamp 时间戳代表一个请求发起的具体时间,服务器端可以做时间间隔的限制,比如时延大于30秒就认为是无效的请求,这就是客户机与服务器时间不同步导致某些功能不可用的问题。
timestamp+nonce主要是为了防止重放攻击,那么根据并发情况,nonce也要设置的足够大;服务器端需要对请求的 timestamp+nonce 进行缓存(缓存的时长就是可允许的最大时延),这样接收到一个请求首先去缓存中查询是否存在相同的,如果存在,就认为是 重放攻击。
本文由 微wx笑 创作,采用 署名-非商业性使用-相同方式共享 4.0 许可协议,转载请附上原文出处链接及本声明。
原文链接:https://www.ivu4e.cn/collection/mp-weixin/issue/2019-09-25/229.html
上一篇:返回列表