微信公众平台开发模式中的安全问题

一言以蔽之:只要URL和TOKEN设置的容易被猜到,ToUsername又不验证。攻击者可以轻易操控存在漏洞的公众平台。

原文作者:Create Chen 
原文出处:http://technology.cnblogs.com

申请公众平台开发者模式需要填写一个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, 那么你的益达就真的是别人的益达了.

posted @ 2014-08-27 12:43  米业  阅读(268)  评论(0编辑  收藏  举报