溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

微信公眾平臺開發安全策略的示例分析

發布時間:2021-09-10 10:34:05 來源:億速云 閱讀:144 作者:小新 欄目:移動開發

這篇文章將為大家詳細講解有關微信公眾平臺開發安全策略的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

一、設置高復雜度的Token,盡量隱藏服務地址URL

URL:即為處理微信請求的鏈接地址
Token:用戶身份憑證

申請成為開發者或者修改URL\Token時,微信會通過Get請求訪問URL,驗證簽名,其中需要Token。

過程相當于一次握手,如果握手成功,可進行后續的通信。

微信公眾平臺開發安全策略的示例分析

面臨的危險:

1、如URL和Token被破解,直接鏈接到其他公眾賬號,直接可以盜用服務。當然對于一些廣告類型賬號而言,這樣無利可圖。但是,如果是提供某種應用或者服務的公眾賬號,免費給其他賬號提供服務,勢必增加服務端壓力,帶來一定的風險。

2、如果URL被破解,即使token沒被破解。一些不法分子,可能對該URL進行攻擊,當然槍打出頭鳥,想被黑客盯上也不沒那么容易。呵呵

建議:

1、盡量保證服務的URL,與提供消息或者網頁沒有直接關系。以防止,根據URL推算得出服務URL。

2、可以使用URL重定向,將一些路徑信息進行隱藏。

3、在服務中判定請求的來源,是否是微信服務器來的請求。這個可以根據請求的URL來進行判定,對于其他請求不予處理。

4、Token值,盡量復雜一些。

二、建議每次請求,都進行簽名驗證

在設置URL或token后,微信都會提交get請求,來訪問我們后端服務。驗證通過之后,微信其他請求都是通過POST方式提交。

所以在代碼中,我們常常會根據請求的方式來判斷是否進行簽名驗證。在之前的例子中,也曾這么用:

 /// <summary>
        /// 處理請求,產生響應
        /// </summary>
        /// <returns></returns>
        public string Response()
        {
            string method = Request.HttpMethod.ToUpper();
            //驗證簽名
            if (method == "GET")
            {
                if (CheckSignature())
                {
                    return Request.QueryString[ECHOSTR];
                }
                else
                {
                    return "error";
                }
            }

            //處理消息
            if (method == "POST")
            {
                return ResponseMsg();
            }

            return "無法處理";
        }

盡管微信其他請求是以POST提交的,但是其URL中同樣攜帶了簽名信息,我們同樣需要進行簽名認證。所以為了安全起見,建議每次請求都進行簽名認證。

根據這個原理,我們將代碼修改如下:

        /// <summary>
        /// 處理請求,產生響應        /// </summary>
        /// <returns></returns>
        public string Response()
        {            string method = Request.HttpMethod.ToUpper();            //驗證簽名
            if (method == "GET")
            {                if (CheckSignature())
                {                    return Request.QueryString[ECHOSTR];
                }                else
                {                    return "error";
                }
            }            //處理消息
            if (method == "POST")
            {                //驗證簽名
                if (CheckSignature())
                {                    return ResponseMsg();
                }
            }            return "無法處理";
        }

簽名算法CheckSignature(),這里不再贅述,具體可見:微信公眾賬號開發基礎框架搭建

三、可以根據ToUserName 驗證請求

通常我們的公眾賬號都對應一個openId,在處理消息時可以獲得。這個openId是固定的,可以根據其判定發送者的身份信息。這種方式,可以很好的過濾無效消息或者欺騙,只有發給我的消息,我才處理。即使URL和Token被人破解,也同樣能夠保證后端服務,只為我們的公眾賬號提供服務。

/// <summary>
        /// 是否是發給我的呢
        /// </summary>
        /// <param name="toUserName">接受者</param>
        /// <returns>bool</returns>
        private bool IsSentToMe(string toUserName)
        {
            return string.Equals(toUserName,Context.OpenID,StringComparison.OrdinalIgnoreCase);
        }

四、AppId和AppSecret

如果是服務號,還有一些高級功能,而這些高級功能需要開發者憑據:AppId和AppSecret。

根據AppId和AppSecret可以獲得ACCESS_TOKEN,根據ACCESS_TOKEN就可以管理高級功能了,比如:自定義菜單。
ACESS_TOKEN有過期時間,通常為7200S。但是AppId和AppSecret是系統隨機生成的,無過期時間,如果需要修改,需要登錄微信公眾賬號管理平臺進行重置。

獲取Access_Token方式,通過Get請求如下URL

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=xxxx&secret=xxxx.

獲取Access_Token后,就可以操作一些高級接口

比如:

創建自定義菜單,是通過http請求方式:POST(請使用https協議)

https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN

具體實現,見:微信公眾賬號開發自定義菜單


ACCESS_TOKEN是通過get方法獲得的,其實不太安全,如果被人竊取,其可以修改自定義菜單的鏈接,可以將其改為一些廣告鏈接,或者更邪惡的鏈接,你這服務器直接成了人家的肉機。所以一定要保證服務器的安全。為了安全起見,建議隔一段時間重置AppId和AppSecret(微信公眾平臺的后臺服務頁面)。重要的還是要保證允許服務器的安全,具體可以見五。

五、保證服務器的安全

服務器安全要素很多,比如:保證網絡安全、設置防火墻、安裝殺毒軟件、限制一些端口等等,這跟我們平時服務器安全要求一樣,這方面資料很多,這里不再贅述。

關于“微信公眾平臺開發安全策略的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女