申請公眾平台開發者模式需要填寫一個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