常见问题您现在的位置是:首页 > 专栏文集 > 微信公众号开发 > 常见问题

微信公众平台签名为什么需要加nonce参数?

<a href='mailto:'>微wx笑</a>的头像微wx笑 2019-09-25常见问题 15 0关键字: 微信公众号  nonce  

首先,并不是为了增加sign被猜出来的难度。
timestamp+nonce主要是为了防止重放攻击。
攻击者可能截获请求,然后反复发送请求(注意,并不是篡改),这时服务端校验签名是能够校验通过的。
服务端为了防止这种攻击,要求调用方:即使每次请求的其他参数相同,也要重新生成nonce和timestamp。如果timestamp和服务端的时间相差超过一定值,直接返回失败;如果两次请求使用的timestamp+nonce相同,就认为是重放攻击,直接返回失败。

微信公众平台签名为什么需要加nonce参数?ePt无知


ePt无知

引用 okayan 的回答:ePt无知

首先,并不是为了增加sign被猜出来的难度。
timestamp+nonce主要是为了防止重放攻击。
攻击者可能截获请求,然后反复发送请求(注意,并不是篡改),这时服务端校验签名是能够校验通过的。
服务端为了防止这种攻击,要求调用方:即使每次请求的其他参数相同,也要重新生成nonce和timestamp。如果timestamp和服务端的时间相差超过一定值,直接返回失败;如果两次请求使用的timestamp+nonce相同,就认为是重放攻击,直接返回失败。

在官方文档中没有找到关于 nonce 参数的详细解释,只在 接入指南 中提到是随机数。
ePt无知

image.pngePt无知

官方搜索结果如下:ePt无知


ePt无知

timestamp 时间戳代表一个请求发起的具体时间,服务器端可以做时间间隔的限制,比如时延大于30秒就认为是无效的请求,这就是客户机与服务器时间不同步导致某些功能不可用的问题。ePt无知


ePt无知

timestamp+nonce主要是为了防止重放攻击,那么根据并发情况,nonce也要设置的足够大;服务器端需要对请求的 timestamp+nonce 进行缓存(缓存的时长就是可允许的最大时延),这样接收到一个请求首先去缓存中查询是否存在相同的,如果存在,就认为是 重放攻击。ePt无知


ePt无知


ePt无知


ePt无知

本文由 微wx笑 创作,采用 署名-非商业性使用-相同方式共享 4.0 许可协议,转载请附上原文出处链接及本声明。
原文链接:https://www.ivu4e.cn/collection/mp-weixin/issue/2019-09-25/229.html

很赞哦! () 有话说 ()