首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 客戶端與服務端通信安全:接口暴露風險與防護體系

     編輯:程式設計綜合問答

威脅模型

  • **接口枚舉**:攻擊者抓包獲取 API 路徑 (`/api.php`)。
  • **重放/偽造請求**:構造惡意參數調用接口 (刷單、注入、遍歷)。
  • **中間人攻擊 (MITM)**:公共 WiFi 劫持明文流量。
  • **逆向分析**:反編譯 APK 獲取加密算法、密鑰、簽名邏輯。

分層防護策略

層級措施成本有效性
傳輸層**強制 HTTPS (TLS 1.2+)**,啟用 HSTS、Certificate Pinning (OkHttp `CertificatePinner`)低防竊聽/篡改/冒充,基礎必做
應用層
簽名驗證
請求參數 + 時間戳 + 隨機數 + AppSecret 計算簽名 (HMAC-SHA256),服務端驗證並防重放 (Redis 存儲 nonce)中防偽造/重放,核心業務必做
應用層
加密
敏感字段 (密碼、身份證) AES-GCM 加密傳輸,密鑰協商用 ECDH 或 RSA中防數據洩露,合規要求
客戶端
強化
代碼混淆 + 加固 (DexGuard/360/騰訊樂固)、關鍵邏輯 Native (JNI)、反調試/反注入、動態密鑰下發高提高逆向門檻,**無法絕對防止**
服務端
風控
設備指紋、IP 信譽、行為分析 (頻率、軌跡)、驗證碼、風險決策引擎高業務級防刷/防薅羊毛,最終防線

關鍵代碼片段 (OkHttp 簽名攔截器)


class SignInterceptor implements Interceptor {
    @Override public Response intercept(Chain chain) throws IOException {
        Request original = chain.request();
        long timestamp = System.currentTimeMillis() / 1000;
        String nonce = UUID.randomUUID().toString().replace("-", "").substring(0, 16);
        String sign = buildSign(original, timestamp, nonce); // 參數排序 + AppSecret + HMAC
        
        Request signed = original.newBuilder()
            .header("X-Timestamp", String.valueOf(timestamp))
            .header("X-Nonce", nonce)
            .header("X-Sign", sign)
            .build();
        return chain.proceed(signed);
    }
}

避坑指南

  1. **不要依賴 User-Agent 驗證**:極易偽造 (`okhttp3` 可任意設置)。
  2. **不要將加密密鑰硬編碼在代碼/資源/so 中**:動態下發、白盒加密、TEE 存儲。
  3. **不要自行設計加密算法**:使用成熟庫 (Bouncy Castle、Tink、Jetpack Security) 的標準算法 (AES-GCM, ChaCha20-Poly1305, ECDSA)。
  4. **接受「客戶端不可信」原則**:所有業務邏輯驗證、權限控制、數據完整性檢查**必須在服務端**。

安全是體系工程,**HTTPS + 簽名防重放 + 服務端風控** 是性價比最高的基線方案;高價值業務再疊加加固、風控引擎、設備指紋等深度防護。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved