Heim  >  Artikel  >  WeChat-Applet  >  Sicherheitsstrategie für die Entwicklung der öffentlichen WeChat-Plattform

Sicherheitsstrategie für die Entwicklung der öffentlichen WeChat-Plattform

高洛峰
高洛峰Original
2017-03-03 10:11:581987Durchsuche

Obwohl sich der Server, der WeChat-Anfragen verarbeitet, im Backend des WeChat-Servers befindet, sind Sicherheitsprobleme dennoch nicht zu unterschätzen.

Fassen Sie die folgenden Aspekte grob zusammen und hoffen Sie, Aufmerksamkeit zu erregen.

1. Richten Sie ein hochkomplexes Token ein und versuchen Sie, die Dienstadressen-URL auszublenden

URL: die Linkadresse für die Verarbeitung von WeChat-Anfragen
Token: Benutzeridentitätsanmeldeinformationen

Wenn Sie sich als Entwickler bewerben oder das URLToken ändern, greift WeChat über die Get-Anfrage auf die URL zu und überprüft die Signatur, für die das Token erforderlich ist.

Der Vorgang entspricht einem Handshake. Bei erfolgreichem Handshake kann die anschließende Kommunikation durchgeführt werden.

微信公众平台开发安全策略

Gefahren:

1. Wenn die URL und das Token geknackt werden, werden sie direkt mit anderen verknüpft Öffentliche Konten können direkt gestohlen werden. Für einige Werbekonten ist dies natürlich unrentabel. Wenn es sich jedoch um ein öffentliches Konto handelt, das bestimmte Anwendungen oder Dienste bereitstellt und andere Konten kostenlose Dienste bereitstellt, erhöht dies unweigerlich den Druck auf den Server und birgt bestimmte Risiken.

2. Wenn die URL geknackt ist, auch wenn das Token nicht geknackt ist. Einige Kriminelle können die URL angreifen. Natürlich ist es nicht einfach, ins Visier von Hackern zu geraten. Haha

Vorschläge:

1. Stellen Sie sicher, dass die URL des Dienstes keinen direkten Bezug zur Bereitstellung von Informationen oder Webseiten hat. Um dies zu verhindern, wird die Dienst-URL anhand der URL berechnet.

2. Sie können die URL-Umleitung verwenden, um einige Pfadinformationen auszublenden.

3. Bestimmen Sie die Quelle der Anfrage im Dienst, ob es sich um eine Anfrage vom WeChat-Server handelt. Dies kann anhand der angeforderten URL ermittelt werden, andere Anfragen werden nicht bearbeitet.

4. Tokenwert, versuchen Sie, so komplex wie möglich zu sein.

2. Es wird empfohlen, für jede Anfrage eine Signaturüberprüfung durchzuführen.

Nach dem Festlegen der URL oder des Tokens sendet WeChat eine Get-Anfrage für den Zugriff auf unseren Backend-Dienst. Nachdem die Verifizierung bestanden wurde, werden alle anderen WeChat-Anfragen per POST übermittelt.

Daher beurteilen wir im Code häufig anhand der Anforderungsmethode, ob eine Signaturüberprüfung durchgeführt werden soll. In früheren Beispielen wurde dies auch verwendet:

 /// 631fb227578dfffda61e1fa4d04b7d25
        /// 处理请求,产生响应
        /// 039f3e95db2a684c7b74365531eb6044
        /// 2363942ed0d6cd3e85bae1dffa568116f7735d9f6a7af371769ab5c16d23b2f3
        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 "无法处理";
        }

Obwohl andere WeChat-Anfragen als POST übermittelt werden, ist ihre URL ebenfalls vorhanden trägt Signaturinformationen, und wir müssen auch eine Signaturauthentifizierung durchführen. Aus Sicherheitsgründen wird daher empfohlen, bei jeder Anfrage eine Signaturauthentifizierung durchzuführen.

Basierend auf diesem Prinzip modifizieren wir den Code wie folgt:

        /// <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 "无法处理";
        }

Signaturalgorithmus CheckSignature() , hier werde ich nicht mehr auf Details eingehen, Einzelheiten finden Sie unter: Aufbau des Grundgerüsts für die Entwicklung eines öffentlichen WeChat-Kontos

3. Die Verifizierungsanfrage kann auf ToUserName basieren

Normalerweise unser öffentliches Konto entspricht einer openId, die bei der Verarbeitung von Nachrichten abgerufen werden kann. Diese openId ist fest und auf dieser Grundlage können die Identitätsinformationen des Absenders ermittelt werden. Auf diese Weise können ungültige Nachrichten oder Täuschungen sehr gut herausgefiltert werden. Ich werde nur die an mich gesendeten Nachrichten verarbeiten. Selbst wenn die URL und das Token geknackt werden, kann der Back-End-Dienst weiterhin garantiert werden und nur Dienste für unser öffentliches Konto bereitstellen.

/// 631fb227578dfffda61e1fa4d04b7d25
        /// 是否是发给我的呢
        /// 039f3e95db2a684c7b74365531eb6044
        /// ec639f3ec6e6df576b367639452f23c7接受者8bb7487ae6a16a43571bc14c7fcf93c2
        /// 2363942ed0d6cd3e85bae1dffa568116boolf7735d9f6a7af371769ab5c16d23b2f3
        private bool IsSentToMe(string toUserName)
        {
            return string.Equals(toUserName,Context.OpenID,StringComparison.OrdinalIgnoreCase);
        }

4. AppId und AppSecret

Wenn es sich um ein Dienstkonto handelt, gibt es einige erweiterte Funktionen und Für diese erweiterten Funktionen sind Entwickleranmeldeinformationen erforderlich: AppId und AppSecret.

Sie können ACCESS_TOKEN basierend auf AppId und AppSecret erhalten und Sie können erweiterte Funktionen basierend auf ACCESS_TOKEN verwalten, z. B. benutzerdefinierte Menüs.
ACESS_TOKEN hat eine Ablaufzeit, normalerweise 7200S. AppId und AppSecret werden jedoch zufällig vom System generiert und haben keine Ablaufzeit. Wenn sie geändert werden müssen, müssen Sie sich bei der öffentlichen Kontoverwaltungsplattform WeChat anmelden, um sie zurückzusetzen.

Um das Access_Token zu erhalten, fordern Sie die folgende URL über Get an

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

Nach Erhalt des Access_Token können Sie einige erweiterte Schnittstellen bedienen

Zum Beispiel:

Erstellen Sie ein benutzerdefiniertes Menü über die HTTP-Anfragemethode: POST (bitte verwenden Sie das https-Protokoll)

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

Spezifische Informationen zur Implementierung finden Sie unter: Benutzerdefiniertes WeChat-Menü für die Entwicklung öffentlicher Konten


ACCESS_TOKEN wird über die get-Methode abgerufen, was eigentlich nicht sehr sicher ist. Wenn jemand es stiehlt, kann es den benutzerdefinierten Link ändern Menü und ändern Sie es in einige Werbelinks oder noch bösere Links, und Ihr Server wird direkt zur Fleischmaschine für andere. Daher müssen wir die Sicherheit des Servers gewährleisten. Aus Sicherheitsgründen wird empfohlen, die AppId und AppSecret (die Hintergrunddienstseite der öffentlichen WeChat-Plattform) von Zeit zu Zeit zurückzusetzen. Das Wichtigste ist, die Sicherheit des zugelassenen Servers zu gewährleisten. Einzelheiten finden Sie unter Fünf.

5. Serversicherheit gewährleisten

Es gibt viele Faktoren für die Serversicherheit, wie zum Beispiel: Gewährleistung der Netzwerksicherheit, Einrichten von Firewalls, Installieren von Antivirensoftware, Beschränken einiger Ports usw. Dies ist dasselbe wie Es gibt viele Informationen zu unseren üblichen Serversicherheitsanforderungen, daher werde ich hier nicht auf Details eingehen.

Weitere Sicherheitsstrategien für die Entwicklung öffentlicher WeChat-Plattformen und verwandte Artikel finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn