开发微信公众平台时需要注意的安全问题
申请公众平台开发者模式需要填写一个URL和一个Token, 见下图:
如果这个URL和Token被别人猜中了, 并且你不判断消息中的ToUserName属性是否跟你微信号相配, 那么别人的公众帐号申请开发者时填写你的URL和你的Token, 别人的公众帐号就能把你公众帐号的功能盗用了.
URL
你的微信号有时会要求用户绑定一些信息, 一般都是一个HTML5的网页, 这条微信内容其实就是一段HTML. 问题是复制这条消息到其它文本框中, HTML是暴露的, 你的<a href=”XXX”>XXX</a>会暴露出来, 所以别人可以轻而易举的拿到链接地址.
关键是不要让别人根据你的链接猜到你申请开发者时填写的URL, 在我看来, 以下格式的URL都相对不安全的:
http://www.XX.com/微信号/weixin.aspx
http://www.XX.com/微信号/weixin.ashx
http://www.XX.com/微信号/weixin.php
http://www.XX.com/微信号/微信号.aspx
http://www.XX.com/微信号/微信号.ashx
http://www.XX.com/微信号/微信号.php
等等…
Signature
在群里经常听别人说图省事, 直接把echostr返回, 根本没顾忌这样做所带来的后果. 如果别人知道了你的URL, 随便填一个Token, 他就顺利验证成功了.
Token
Token建议使用随机字符串, 以下格式的Token都是相对不安全的:
123
123456
abc
微信号
微信号123
等等...
如果不巧, 上面两点你都没有注意, 别人可能就会得逞. 上午我就测试了一个, 猜了一次就成功了.
ToUserName
有人说你不是知道了我的URL和Token, 我改一下Token你不就没用了么. 关键问题是别人之前用你的URL和Token验证成功了, 微信一旦认为你成功了, 以后还会再次验证这个URL和Token么? 所以微信每条消息返回的ToUserName属性不是没用的, 你的程序应该判断是否跟你的微信号相配.
如果你的URL和Token暴露了, 又没有判断ToUserName, 那么你的益达就真的是别人的益达了.
给微信的建议
1. URL必须是唯一的
A帐号已经用这个URL成功激活开发者模式, 就不应该允许另一个B帐号再用这个URL来激活开发者模式.
2. Token由公众平台生成
可以在用户输入URL之后, 系统为用户生成Token. 用户在自己的系统中改好Token后再验证, 这样可以保证Token的随机.
本文链接: http://www.cnblogs.com/technology/p/wenxin_security.html
作者:Create Chen
出处:http://technology.cnblogs.com
说明:文章为作者平时里的思考和练习,可能有不当之处,请博客园的园友们多提宝贵意见。
本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。