wxpusher-docs icon indicating copy to clipboard operation
wxpusher-docs copied to clipboard

回调/上行消息能否增加签名?

Open AlexGuo1998 opened this issue 3 years ago • 0 comments

我们(记为A)接收上行消息时,为了保证安全,有时需要确保该消息是wxpusher(记为B)推送的。 比如“发送指令重启服务”的情况,不仅要保证该用户是已知的管理员用户,还要保证该POST的请求来源是wxpusher,而不是第三方。

建议wxpusher后台回调时增加一个签名(使用消息内容和appToken),这样只要第三方拿不到token,就无法伪造请求来源。 具体的实现方法,个人想法是:

  • B回调A时,在POST请求头中增加一个sign字段,该字段为整条JSON内容 + "-" + appToken用某种散列算法(MD5或者SHA1或者其他的算法)(记为hash(...))进行签名
  • A收到请求时,分两种情况:
    • 如果该回调地址只有一个app使用,则直接计算hash(整条JSON内容 + "-" + appToken)sign比较,如果不相同则丢弃消息,相同则继续处理;
    • 如果有多个app使用同一个回调地址,则先解析消息内容得到appId,然后查得相应的appToken,再进行上面的处理
  • 如果要防止重放攻击,A要进行额外的判断,如:
    • 整条消息是否在之前的x分钟内重复过?(只需判断sign是否重复过)
    • time字段和本地时间之差,是否在合理区间内?(小于x分钟)

这样既不会破坏旧的协议,也可以增加回调的安全性。希望这个建议能被采纳。

AlexGuo1998 avatar Oct 25 '20 03:10 AlexGuo1998