🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 二、移动开发安全 ### (一)通用 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文件会对键盘输入进行明文缓存。