概述
在日常的Android开发中比较少注意一些细节的可能带来安全问题的地方,如果不是专业的机构来检测安全漏洞那么我们自己可能一直都不会注意到。
安全,永远是相对的。有的漏洞是一直存在的,但是你的App会不会被攻击是另一回事,取决于攻击之后带来的“产出”比,费了九牛二虎之力得不到高的收益那些黑客也不会搭理你。下面是一些开发中“顺手”就可以解决的问题,当然这里罗列的只是一小部分。
问题罗列
- 应用数据备份问题
- 四大组件的导出风险
- RSA加密算法不安全使用漏洞
解决问题
应用数据备份问题
在androidManifest.xml中application标签下有一个allowBackup属性,默认为true 。当 allowBackup 标志为 true 时,用户即可通过 adb backup 和 adb restore 来进行对应用数据的备份和恢复。我们应该手动将其设置为false。
四大组件的导出风险
android:exported 是Android中的四大组件 Activity,Service,ContentProvider,BroadcastReceiver 四大组件中都会有的一个属性。
作用是:是否支持其它应用调用当前组件。
默认值:如果包含有intent-filter 默认值为true; 没有intent-filter默认值为false。注意了如果包含有intent-filter那就要手动设置android:exported=false。
RSA加密算法不安全使用漏洞
RSA算法是最为典型的非对称加密算法,也是当今应用范围最为广泛的非对称加密算法,也是第一个能用于数据加密也能用于数字签名的算法。
使用RSA加密算法时,应注意以下两点:
- 密钥长度过短,会导致密钥被破解,通常小于512bit的密钥即存在破解的风险;
- 加密算法没有使用正确的工作模式和填充方式,容易导致部分加密数据被破解或者遭到选择明文攻击(CPA)。
RSA加密算法的不安全使用,可能导致客户端隐私数据泄露,加密文件破解,传输数据被获取,中间人攻击等后果,造成用户敏感信息被窃取,甚至造成财产损失。
解决方法如下:
使用RSA加密算法时,密钥长度建议设置为2048bit,同时分别设置工作模式为ECB,填充模式为OAEPWithSHA256AndMGF1Padding。以下为修复代码示例:
1.KeyPairGenerator DemoKey=KeyPairGenerator.getInstance("RSA");
DemoKey.initialize(2048);
2.Cipher DemoCipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA256AndMGF1Padding");
DemoCipher.init(Cipher.ENCRYPT_MODE, keyPrivate);