ホームページ > 記事 > WeChat アプレット > WeChatパブリックプラットフォーム開発のセキュリティ戦略
WeChat リクエストを処理するサーバーは WeChat サーバーのバックエンドにありますが、セキュリティの問題は依然として過小評価できません。
注目を集めるために、次の側面を大まかに要約します。
1. 非常に複雑なトークンを設定し、サービスアドレス URL を非表示にしてみます
URL: これは WeChat リクエストを処理するためのリンク アドレスです
トークン: ユーザー ID 証明書
開発者になることを申請するとき、または URLToken を変更するとき、 WeChat は、Get Access を通じて URL をリクエストし、トークンを必要とする署名を検証します。
この処理はハンドシェイクに相当し、ハンドシェイクが成功するとその後の通信が可能となります。
直面する危険:
1. URL とトークンがクラックされ、他の公開アカウントに直接リンクされている場合、サービスが直接盗まれる可能性があります。もちろん、一部の広告タイプのアカウントでは、これでは利益が得られません。しかし、特定のアプリケーションやサービスを提供し、他のアカウントには無料でサービスを提供するパブリックアカウントの場合、必然的にサーバーへの負荷が増大し、一定のリスクが生じます。
2. トークンがクラックされていなくても、URL がクラックされた場合。もちろん、犯罪者の中にはその URL を攻撃する人もいます。笑
提案:
1. サービスの URL が情報や Web ページの提供と直接的な関係がないことを確認するようにしてください。これを防ぐために、サービス URL は URL に基づいて計算されます。
2. URL リダイレクトを使用して、一部のパス情報を非表示にすることができます。
3. サービス内のリクエストのソースを特定します (WeChat サーバーからのリクエストであるかどうか)。これはリクエストされた URL に基づいて決定され、他のリクエストは処理されません。
4. トークンの値は、できるだけ複雑にするようにしてください。
2. すべてのリクエストに対して署名検証を実行することをお勧めします
URL またはトークンを設定した後、WeChat はバックエンド サービスにアクセスするための get リクエストを送信します。検証に合格した後、他のすべての WeChat リクエストは POST を通じて送信されます。
そのため、コードではリクエストメソッドに基づいて署名検証を行うかどうかを判断することがよくあります。前の例では、これも使用されました:
/// 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 "无法处理"; }
他の WeChat リクエストは 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()。詳細については、ここでは詳しく説明しません: WeChat パブリック アカウント開発の基本フレームワークの構築を参照してください。
通常、パブリック アカウントはメッセージの処理時に取得できる openId に対応します。このopenIdは固定されており、これに基づいて送信者の身元情報を判断できます。このようにして、無効なメッセージや欺瞞を非常にうまくフィルタリングすることができ、私に送信されたメッセージのみが処理されます。 URL とトークンがクラックされた場合でも、バックエンド サービスは保証されており、パブリック アカウントに対してのみサービスを提供します。
/// 631fb227578dfffda61e1fa4d04b7d25 /// 是否是发给我的呢 /// 039f3e95db2a684c7b74365531eb6044 /// ec639f3ec6e6df576b367639452f23c7接受者8bb7487ae6a16a43571bc14c7fcf93c2 /// 2363942ed0d6cd3e85bae1dffa568116boolf7735d9f6a7af371769ab5c16d23b2f3 private bool IsSentToMe(string toUserName) { return string.Equals(toUserName,Context.OpenID,StringComparison.OrdinalIgnoreCase); }
サービス アカウントの場合、いくつかの高度な機能があり、これらの高度な機能には開発者の資格情報 (AppId と AppSecret) が必要です。
AppIdとAppSecretに基づいてACCESS_TOKENを取得でき、ACCESS_TOKENに基づいてカスタムメニューなどの高度な機能を管理できます。
ACESS_TOKEN には有効期限があり、通常は 7200 秒です。ただし、AppId と AppSecret はシステムによってランダムに生成され、有効期限がありません。変更する必要がある場合は、WeChat パブリック アカウント管理プラットフォームにログインしてリセットする必要があります。
Access_Token を取得するには、Get
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=xxxx&secret=xxxx.
を通じて次の URL をリクエストします。 Access_Token を取得した後、いくつかの高度なインターフェイスを操作できます
例:
http リクエスト メソッド: POST を通じてカスタム メニューを作成します (https を使用してください)プロトコル)
https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN
具体的な実装については、次を参照してください: WeChat パブリック アカウント開発カスタム メニュー
ACCESS_TOKEN は get メソッドを通じて取得されますが、実際にはあまり安全ではありません。盗まれた場合、リンクを変更する可能性があります。カスタム メニューを広告リンクや邪悪なリンクに変更すると、サーバーが直接他人の食肉機械になります。したがって、サーバーのセキュリティを確保する必要があります。セキュリティ上の理由から、AppId と AppSecret (WeChat パブリック プラットフォームのバックグラウンド サービス ページ) を時々リセットすることをお勧めします。最も重要なことは、許可されたサーバーのセキュリティを確保することです。詳細については、5 を参照してください。
サーバーのセキュリティには、ネットワークのセキュリティの確保、ファイアウォールの設定、ウイルス対策ソフトウェアのインストール、一部のポートの制限など、さまざまな要素があります。これは通常のサーバーと同じです。この領域には多くの情報がありますが、ここでは説明しません。
WeChat パブリック プラットフォーム開発のセキュリティ戦略と関連記事の詳細については、PHP 中国語 Web サイトに注目してください。