微信小程序 安全指引·通用

2022-05-11 15:49 更新

通用

接口鑒權(quán)

接口鑒權(quán)是指后臺接口(包括自建后臺接口與云函數(shù))在被調(diào)用時(shí)需要對本次接口調(diào)用進(jìn)行權(quán)限校驗(yàn),否則容易發(fā)生越權(quán)行為。如商品刪除接口,后臺在收到請求時(shí)應(yīng)當(dāng)校驗(yàn)調(diào)用者的身份信息(如 openid、 ip 地址、開發(fā)者自定義的登錄信息等),只有指定用戶才可以通過校驗(yàn)進(jìn)行刪除。

越權(quán)通常分為平行越權(quán)和垂直越權(quán):

  • 平行越權(quán) 
    平行越權(quán)是指相同角色之間的越權(quán)。 A1、 A2 都是普通用戶, A1 通過請求后臺接口 userinfo.php?id=A1 來獲取用戶 A1 自己的信息,如果 userinfo.php 沒有進(jìn)行權(quán)限校驗(yàn),用戶 A1 把請求改為 userinfo.php?id=A2 便可以獲取到 A2 用戶的信息,造成 A2 用戶信息的泄露。
  • 垂直越權(quán) 
    垂直越權(quán)是指不同角色之間的越權(quán)。 B1 是管理員, B2 是普通用戶,管理員 B1 通過請求后臺接口 getalluserinfo.php 可以獲取所有注冊用戶的信息,如果 getalluserinfo.php 沒有進(jìn)行權(quán)限校驗(yàn), B2 用戶也可以請求 getalluserinfo.php 來獲取所有注冊用戶的信息,出現(xiàn)越權(quán)行為。

開發(fā)建議:

  1. 敏感數(shù)據(jù)、能力相關(guān)接口需要在后臺進(jìn)行鑒權(quán)。通??尚r?yàn) openid、 IP 地址、自定義登陸態(tài)等信息。
  2. 鑒權(quán)邏輯應(yīng)放在后臺進(jìn)行,不應(yīng)在小程序前端以隱藏頁面、隱藏按鈕等方式來代替。參照原則4。
  3. 鑒權(quán)代碼示例(僅供參考)
    1. 自建后臺鑒
      function actionDelete(){
          $item_id = $_POST["item_id"]; 
          $openid = $_POST["openid"];
          $ip = $_SERVER['REMOTE_ADDR'];
          $user_role = $_SESSION["user_role"];
          if ($openid === "xxx" &&
              $ip === "192.168.0.101" &&
              $user_role === "admin") {
                  // 進(jìn)行刪除操作
                  // ...
                  return 0;
              } else {
                  // 記錄非法請求
                  // ...
                  return -1;
              }
      }
    2. 云函數(shù)接口鑒權(quán)

      exports.main = async (event, context) => {
          const { OPENID, APPID, UNIONID } = cloud.getWXContext();
          if (OPENID === "xxx") {
              // 進(jìn)行刪除操作
              // ...
          } else {
              // 記錄非法請求
              // ...
          }
      }

    代碼管理與泄漏

    1. 當(dāng)使用 git、 svn 等版本管理工具時(shí),會產(chǎn)生 .git 等目錄。某些編輯器或軟件也會在運(yùn)行過程中生成臨時(shí)文件。若這些目錄或文件被帶到生產(chǎn)環(huán)境,則可能發(fā)生源碼泄漏。
    2. 使用小程序代碼管理平臺或 github 等第三方平臺時(shí)需要注意項(xiàng)目權(quán)限,不要公開敏感、內(nèi)部項(xiàng)目。

    開發(fā)建議:

    1. 備份文件和版本管理工具產(chǎn)生的文件不要同步到 Web 目錄下。
    2. 禁止外部訪問 .git 等目錄與文件。
    3. 小程序代碼管理平臺等管理平臺內(nèi)配置適當(dāng)?shù)脑L問權(quán)限。

    小程序

    信息泄露

    敏感信息是指一旦泄露可能會對開發(fā)者的業(yè)務(wù)、合作伙伴和用戶帶來利益損害的數(shù)據(jù),包括但不限于帳號 Appsecret、特權(quán)帳號信息、后臺加密密鑰、登錄賬戶密碼、用戶身份證號、手機(jī)號、銀行卡號等。

    開發(fā)建議:

    1. 敏感信息不應(yīng)以明文、注釋、可逆的編碼方式(如 base64)、不安全散列函數(shù)(如 MD5、 SHA1)等形式出現(xiàn)在小程序文件內(nèi)。
    2. 部分敏感信息如用戶的銀行卡號、手機(jī)號等需要用于展示的,需要進(jìn)行脫敏處理。常用脫敏規(guī)范如下: 
      敏感信息類型 展示樣例
      姓名 名字只有兩個字,對第一個字打碼,如:*三。 多于兩個字,只保留第一個和最后一個,其余都打碼,如:王*四、歐**五
      身份證 只顯示第一位和最后一位,如:3****************1
      手機(jī)號 除去手機(jī)國際碼后,手機(jī)號位數(shù)不少于10位時(shí),只顯示前三位和最后兩位,如:156******77。手機(jī)號位數(shù)少于10位時(shí),只顯示前兩位和后兩位,如:12*****89。國家碼可以完全顯示。
      銀行卡 只顯示最后4位,如:************1234
    3. 如果小程序存在敏感信息泄露的問題,微信開放平臺將有可能下架該小程序,并暫停該小程序的相關(guān)服務(wù)。


    以上內(nèi)容是否對您有幫助:
    在線筆記
    App下載
    App下載

    掃描二維碼

    下載編程獅App

    公眾號
    微信公眾號

    編程獅公眾號