## 二、移動開發安全
### (一)通用
1. 【<font color=red>強制</font>】禁止在客戶端本地存儲賬號密碼、銀行卡號、證件號、不失效的用戶cookies等敏感信息。
> **說明**:
> **客戶端本地**包括但不限于:
> * 本地數據庫(一般為SQLite)
> * 客戶端本地文件(包括外部存儲)
> * 日志
> * 臨時文件、緩存
2. 【<font color=red>強制</font>】禁止在客戶端源代碼中(包括json、xml、plist等文件)存儲硬編碼的加密密鑰等敏感信息。
3. 【<font color=red>強制</font>】應用的私有文件、數據庫等不應允許其他應用訪問。
4. 【<font color=red>強制</font>】加密存放客戶端SQLite數據庫及XML文件中的重要數據。
> **說明**:使用SQLCipher等加密軟件加密客戶端本地SQLite數據庫。
5. 【<font color=red>強制</font>】服務端對密碼的復雜度進行判斷,避免使用弱口令的用戶受到攻擊。
> **說明**:
> **密碼變更涉及場景**:
> a) 新用戶注冊
> b)密碼修改
> c)密碼重置
6. 【<font color=red>強制</font>】登錄、密碼重置等場景,對用戶一定時間內可執行的次數進行限制,并通過驗證碼等人機交互手段,防范攻擊者暴力破解。
> **說明**:驗證碼的處理要求見代碼安全中驗證碼相關條目。
7. 【<font color=red>強制</font>】手勢密碼策略
> **說明**:手勢密碼必須連接至少4個點,不允許以明文或可逆的方式存儲在客戶端本地。
8. 【<font color=red>強制</font>】對于涉及財物變更等重要操作的功能,應當使用二次驗證手段。
9. 【推薦】關鍵操作使用HTTPS傳輸。
> **說明**:承載HTTPS請求的頁面中,如存在HTTP請求鏈接(常見于圖片、CSS、js文件),仍存在一定風險。
10. 【推薦】對請求字符串進行加簽處理,服務端驗證該動態簽名是否合法。
> **說明**:攻擊者對請求數據進行篡改時,由于客戶端與服務端計算得到的動態簽名不同,因此服務端拒絕該請求。需要注意的是,如果動態簽名為空,應當直接拒絕該請求,而不是放行該請求。
11. 【<font color=red>強制</font>】移動應用應當通過服務端驗證輸入數據的合法性,使用的服務端接口需要滿足代碼安全相關要求。
### (二)Android
1. 【<font color=red>強制</font>】APK應用上線必須進行加固。
> **說明**:一般情況下,推薦使用360、阿里、騰訊的加固方案;對于應用市場有特定要求的,使用滿足其要求的加固方式。加固時,應實現代碼混淆、反調試、反編譯、加殼、簽名校驗等功能。
2. 【<font color=red>強制</font>】應用的關鍵邏輯或狀態轉換動作不應放在可導出組件中。對外開放的組件需聲明權限,盡量使用白名單方式控制允許的調用源。
3. 【<font color=red>強制</font>】謹慎使用WebView提供的Javascript調用Java對象的方法,避免遠程代碼執行。
> **說明**:對于Android 4.2及以上版本,使用JavascriptInterface代替addJavascriptInterface。同時,僅在訪問可信頁面數據時,才使用該功能,并在調用Java對象方法前進行參數檢查。
4. 【<font color=red>強制</font>】SharedPreferences等涉及數據存儲的功能只允許本應用讀寫數據。
> **說明**:SharedPreferences等涉及數據存儲的功能應當使用MODE_PRIVATE設置只允許本應用讀寫數據,禁止使用MODE_WORLD_READABLE和MODE_WORLD_WRITABLE。
### (三)iOS
1. 【<font color=red>強制</font>】敏感信息不應以明文或弱加密(如:MD5、Base64)的形式存放在Keychain中。
> **說明**:對于已越獄的設備,Keychain可以被隨意訪問,因此明文或弱加密形式存儲在Keychain中的敏感信息,存在被泄露的風險。
2. 【<font color=red>強制</font>】用戶輸入敏感信息的輸入框,不應使用自動補全功能,避免緩存信息保存到客戶端本地。
> **說明**:iOS的/private/var/mobile/Library/Keyboard/dynamic-text.dat文件會對鍵盤輸入進行明文緩存。
- 說明
- Python編程規范
- Python風格規范
- Python語言規范
- Java編程規范
- 一、命名約定
- 二、常量定義
- 三、格式約定
- 四、OOP約定
- 五、集合處理
- 六、并發控制
- 七、控制語句
- 八、注釋約定
- 九、異常日志
- 十、日志約定
- Android開發規范
- 前端開發規范
- HTML
- JavaScript
- CSS
- MySQL約定
- 一、基本規范
- 二、庫表設計規范
- 三、字段設計規范
- 四、索引規范
- 五、SQL設計規范
- 六、業務字段命名規范
- 開發安全約定
- 一、代碼安全
- 二、移動開發安全
- 三、服務器安全
- 四、安全意識
- 版本管理
- Git使用規范
- 技術實踐及可視化
- 一、Code Review
- 二、單元測試
- 三、自動化測試
- 四、技術債
- 五、CI
- IOS開發規范