## 二、移动开发安全
### (一)通用
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开发规范