搜尋
首頁微信小程式微信開發微信公眾平台開發安全策略

微信公眾平台開發安全策略

Mar 03, 2017 am 10:11 AM
微信大眾平台

儘管處理微信請求的伺服器,處於微信伺服器的後端,但是安全性問題依然不可小覷。

大概總結以下幾個方面,希望引起注意。

一、設定高複雜度的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>接受者
        /// <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(微信公眾平台的後台服務頁面)。重要的還是要確保允許伺服器的安全,具體可以見五。

五、確保伺服器的安全

伺服器安全要素很多,例如:確保網路安全、設定防火牆、安裝防毒軟體、限制一些連接埠等等,這跟我們平時伺服器安全要求一樣,這方面資料很多,這裡不再贅述。 

 更多微信大眾平台開發安全策略 相關文章請追蹤PHP中文網!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器