溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

微信公眾平臺(tái)開發(fā)安全策略的示例分析

發(fā)布時(shí)間:2021-09-10 10:34:05 來(lái)源:億速云 閱讀:95 作者:小新 欄目:移動(dòng)開發(fā)

這篇文章將為大家詳細(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ù)的通信。

微信公眾平臺(tái)開發(fā)安全策略的示例分析

面臨的危險(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ǔ)框架搭建

三、可以根據(jù)ToUserName 驗(yàn)證請(qǐng)求

通常我們的公眾賬號(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);
        }

四、AppId和AppSecret

如果是服務(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ù)器安全要素很多,比如:保證網(wǎng)絡(luò)安全、設(shè)置防火墻、安裝殺毒軟件、限制一些端口等等,這跟我們平時(shí)服務(wù)器安全要求一樣,這方面資料很多,這里不再贅述。

關(guān)于“微信公眾平臺(tái)開發(fā)安全策略的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(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)容。

AI