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

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

<a href='mailto:'>微wx笑</a>的头像微wx笑2019-09-25 16:30:45常见问题人已围观关键字:微信公众号,nonce

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

微信公众平台签名为什么需要加nonce参数?qNR编程技术_踩坑日志_进阶指南 - 无知人生


qNR编程技术_踩坑日志_进阶指南 - 无知人生

引用 okayan 的回答:qNR编程技术_踩坑日志_进阶指南 - 无知人生

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

在官方文档中没有找到关于 nonce 参数的详细解释,只在 接入指南 中提到是随机数。
qNR编程技术_踩坑日志_进阶指南 - 无知人生

image.pngqNR编程技术_踩坑日志_进阶指南 - 无知人生

官方搜索结果如下:qNR编程技术_踩坑日志_进阶指南 - 无知人生


qNR编程技术_踩坑日志_进阶指南 - 无知人生

timestamp 时间戳代表一个请求发起的具体时间,服务器端可以做时间间隔的限制,比如时延大于30秒就认为是无效的请求,这就是客户机与服务器时间不同步导致某些功能不可用的问题。qNR编程技术_踩坑日志_进阶指南 - 无知人生


qNR编程技术_踩坑日志_进阶指南 - 无知人生

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


qNR编程技术_踩坑日志_进阶指南 - 无知人生


qNR编程技术_踩坑日志_进阶指南 - 无知人生


qNR编程技术_踩坑日志_进阶指南 - 无知人生

本文由 微wx笑 创作,采用 CC BY-NC 4.0 许可协议。 非商业性使用可自由转载、引用、甚至修改,但需署名作者且注明出处。

很赞哦! () 有话说 ()

站点信息

  • 建站时间:2018-10-24
  • 服务期限阿里云ECS 2027年到期
  • 主题模板:基于《今夕何夕》修改
  • 文章统计:210篇
  • 文章评论:15条
  • 文章阅读:2818次
  • 文章点赞:1026次
  • 微信公众号:扫描二维码,关注我们
  • 二维码-微信公众号-微wx笑