开发微信公众平台时需要注意的安全问题

        申请公众平台开发者模式需要填写一个URL和一个Token, 见下图:

        如果这个URL和Token被别人猜中了, 并且你不判断消息中的ToUserName属性是否跟你微信号相配, 那么别人的公众帐号申请开发者时填写你的URL和你的Token, 别人的公众帐号就能把你公众帐号的功能盗用了.

URL

        你的微信号有时会要求用户绑定一些信息, 一般都是一个HTML5的网页, 这条微信内容其实就是一段HTML. 问题是复制这条消息到其它文本框中, HTML是暴露的, 你的<a href=”XXX”>XXX</a>会暴露出来, 所以别人可以轻而易举的拿到链接地址.

        关键是不要让别人根据你的链接猜到你申请开发者时填写的URL, 在我看来, 以下格式的URL都相对不安全的:

http://www.XX.com/

http://www.XX.com/微信号

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

posted @ 2013-07-24 15:19  Create Chen  阅读(23889)  评论(15编辑  收藏