您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)微信公眾平臺(tái)開發(fā)安全策略的示例分析,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
一、設(shè)置高復(fù)雜度的Token,盡量隱藏服務(wù)地址URL
URL:即為處理微信請(qǐng)求的鏈接地址
Token:用戶身份憑證
申請(qǐng)成為開發(fā)者或者修改URL\Token時(shí),微信會(huì)通過Get請(qǐng)求訪問URL,驗(yàn)證簽名,其中需要Token。
過程相當(dāng)于一次握手,如果握手成功,可進(jìn)行后續(xù)的通信。
面臨的危險(xiǎn):
1、如URL和Token被破解,直接鏈接到其他公眾賬號(hào),直接可以盜用服務(wù)。當(dāng)然對(duì)于一些廣告類型賬號(hào)而言,這樣無(wú)利可圖。但是,如果是提供某種應(yīng)用或者服務(wù)的公眾賬號(hào),免費(fèi)給其他賬號(hào)提供服務(wù),勢(shì)必增加服務(wù)端壓力,帶來(lái)一定的風(fēng)險(xiǎn)。
2、如果URL被破解,即使token沒被破解。一些不法分子,可能對(duì)該URL進(jìn)行攻擊,當(dāng)然槍打出頭鳥,想被黑客盯上也不沒那么容易。呵呵
建議:
1、盡量保證服務(wù)的URL,與提供消息或者網(wǎng)頁(yè)沒有直接關(guān)系。以防止,根據(jù)URL推算得出服務(wù)URL。
2、可以使用URL重定向,將一些路徑信息進(jìn)行隱藏。
3、在服務(wù)中判定請(qǐng)求的來(lái)源,是否是微信服務(wù)器來(lái)的請(qǐng)求。這個(gè)可以根據(jù)請(qǐng)求的URL來(lái)進(jìn)行判定,對(duì)于其他請(qǐng)求不予處理。
4、Token值,盡量復(fù)雜一些。
二、建議每次請(qǐng)求,都進(jìn)行簽名驗(yàn)證
在設(shè)置URL或token后,微信都會(huì)提交get請(qǐng)求,來(lái)訪問我們后端服務(wù)。驗(yàn)證通過之后,微信其他請(qǐng)求都是通過POST方式提交。
所以在代碼中,我們常常會(huì)根據(jù)請(qǐng)求的方式來(lái)判斷是否進(jìn)行簽名驗(yàn)證。在之前的例子中,也曾這么用:
/// <summary> /// 處理請(qǐng)求,產(chǎn)生響應(yīng) /// </summary> /// <returns></returns> public string Response() { string method = Request.HttpMethod.ToUpper(); //驗(yàn)證簽名 if (method == "GET") { if (CheckSignature()) { return Request.QueryString[ECHOSTR]; } else { return "error"; } } //處理消息 if (method == "POST") { return ResponseMsg(); } return "無(wú)法處理"; }
盡管微信其他請(qǐng)求是以POST提交的,但是其URL中同樣攜帶了簽名信息,我們同樣需要進(jìn)行簽名認(rèn)證。所以為了安全起見,建議每次請(qǐng)求都進(jìn)行簽名認(rèn)證。
根據(jù)這個(gè)原理,我們將代碼修改如下:
/// <summary> /// 處理請(qǐng)求,產(chǎn)生響應(yīng) /// </summary> /// <returns></returns> public string Response() { string method = Request.HttpMethod.ToUpper(); //驗(yàn)證簽名 if (method == "GET") { if (CheckSignature()) { return Request.QueryString[ECHOSTR]; } else { return "error"; } } //處理消息 if (method == "POST") { //驗(yàn)證簽名 if (CheckSignature()) { return ResponseMsg(); } } return "無(wú)法處理"; }
簽名算法CheckSignature(),這里不再贅述,具體可見:微信公眾賬號(hào)開發(fā)基礎(chǔ)框架搭建
通常我們的公眾賬號(hào)都對(duì)應(yīng)一個(gè)openId,在處理消息時(shí)可以獲得。這個(gè)openId是固定的,可以根據(jù)其判定發(fā)送者的身份信息。這種方式,可以很好的過濾無(wú)效消息或者欺騙,只有發(fā)給我的消息,我才處理。即使URL和Token被人破解,也同樣能夠保證后端服務(wù),只為我們的公眾賬號(hào)提供服務(wù)。
/// <summary> /// 是否是發(fā)給我的呢 /// </summary> /// <param name="toUserName">接受者</param> /// <returns>bool</returns> private bool IsSentToMe(string toUserName) { return string.Equals(toUserName,Context.OpenID,StringComparison.OrdinalIgnoreCase); }
如果是服務(wù)號(hào),還有一些高級(jí)功能,而這些高級(jí)功能需要開發(fā)者憑據(jù):AppId和AppSecret。
根據(jù)AppId和AppSecret可以獲得ACCESS_TOKEN,根據(jù)ACCESS_TOKEN就可以管理高級(jí)功能了,比如:自定義菜單。
ACESS_TOKEN有過期時(shí)間,通常為7200S。但是AppId和AppSecret是系統(tǒng)隨機(jī)生成的,無(wú)過期時(shí)間,如果需要修改,需要登錄微信公眾賬號(hào)管理平臺(tái)進(jìn)行重置。
獲取Access_Token方式,通過Get請(qǐng)求如下URL
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=xxxx&secret=xxxx.
獲取Access_Token后,就可以操作一些高級(jí)接口
比如:
創(chuàng)建自定義菜單,是通過http請(qǐng)求方式:POST(請(qǐng)使用https協(xié)議)
https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN
具體實(shí)現(xiàn),見:微信公眾賬號(hào)開發(fā)自定義菜單
ACCESS_TOKEN是通過get方法獲得的,其實(shí)不太安全,如果被人竊取,其可以修改自定義菜單的鏈接,可以將其改為一些廣告鏈接,或者更邪惡的鏈接,你這服務(wù)器直接成了人家的肉機(jī)。所以一定要保證服務(wù)器的安全。為了安全起見,建議隔一段時(shí)間重置AppId和AppSecret(微信公眾平臺(tái)的后臺(tái)服務(wù)頁(yè)面)。重要的還是要保證允許服務(wù)器的安全,具體可以見五。
服務(wù)器安全要素很多,比如:保證網(wǎng)絡(luò)安全、設(shè)置防火墻、安裝殺毒軟件、限制一些端口等等,這跟我們平時(shí)服務(wù)器安全要求一樣,這方面資料很多,這里不再贅述。
關(guān)于“微信公眾平臺(tái)開發(fā)安全策略的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。