现在的位置: 首页 > 综合 > 正文

安全问题,解决方案

2018年04月06日 ⁄ 综合 ⁄ 共 1418字 ⁄ 字号 评论关闭
     类别 安全点 安全等级 备注
数据存储安全 外部存储 对与外部存储的隐私数据内容要进行加密,密码保存在内部存储,由系统托管或者由用户使用时输入。 3 外部可任意读,内部基于linux权限管理
系统数据外部存储需要加密 2
将软件运行时依赖的数据(服务器列表)保存在内部存储,或使用前比对hash 3
动态加载的外部程序代码加载前要做完整性验证 2 例如存储在sd卡的含扩展功能的dex,jar
内部存储 内部存储用户隐私信息需要进行加密 3 用户手机可能root,所以即使存储在内部也不安全。
使用openFileOutput(String name,int mode)创建文件时,第二个参数不要使用Context.MODE_WORLD_READABLE或 Context.MODE_WORLD_WRITEABLE,造成全局读写。如果要跨应用共享数据,一种较好的方法是实现一个Content Provider组件,提供数据的读写接口,并为读写操作分别设置一个自定义权限。 3
通信 对敏感数据采用基于SSL/TLS的HTTPS进行传输 3 在SSL/TLS通信中,客户端通过数字证书判断服务器是否可信,并采用证书中的公钥与服务器进行加密通信。
通过短信注册或接收密码的方法,可能引起假冒注册、恶意密码重置、密码窃取等攻击。此外,这种与手机号关联的账户还可能产生增值服务,危险更大。较好的实现方式还是走Internet。 2
密码策略 使用基于凭据而不是密码的协议满足这种资源持久访问的需求,例如OAuth。 2 例如 记住密码功能。Base64、固定字节或字符串异或、ProtoBuf等方法对密码编码。攻击者可以对Android软件进行反汇编和反编译。攻击者可以借此了解软件对密码的编码方法和编码参数。
对外服务要进行密码验证,并杜绝弱密码 3
组件安全 广播接受者要设定权限 3
无外部程序调用组件, 则android:exported设置为false 3 外部程序指签名不同,用户ID不同
如果组件需要被特定程序访问,则通过
android:permission属性指定一个权限字符串,必要情况下提升permission的level,例如到signature级别
3 例如<Activity android:name=".MyActivity"
android:permission="com.droider.permission.MyActivity">
<inent-filter><action android:name="com.droider.action.work"></action><intent-filter><Activity>
代码安全 Java代码需要进行混淆或者加密处理 3 可使用ProGuard、apkprotect等工具
设置反调试保护机制,防止修改内存代码和数据,分析程序逻辑,进行攻击和破解等行为。对于金融行业客户端,该风险可修改客户端业务操作时的数据,比如账号、金额等。 2
so文件需要进行保护 2 可进行加壳,加花指令等
App字符串,配置信息等资源要进行加密,防止攻击者盗用、篡改,生成钓鱼App 3
采取防止二次打包措施,例如启动校验签名 3
服务器安全 不要使用IMEI或IMSI作为唯一认证凭据 2 若使用IMEI或IMSI作为认证的唯一凭据,攻击者可能伪造并获得服务器中的用户账户及数据。
对手机终端提交的输入进行过滤,限制敏感字符的输入,可对< > ( ) & # 这些符号进行转义,或采用参数化查询策略,防止sql注入等 3

抱歉!评论已关闭.