Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
AlexGuo1998 opened this issue Oct 25, 2020 · 0 comments
Open

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

AlexGuo1998 opened this issue Oct 25, 2020 · 0 comments

Comments

@AlexGuo1998
Copy link

我们(记为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分钟)

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant