[Android] APK 正式发布的安全选项设置
在 APK 正式发布时,有一些常见的安全选项需要设置:
1、禁止设置 debugable=true
取消前:
取消后:
1)Project -> Build Automatically,即取消 Build Automatically
2)Project -> Clean
3)Project -> Build
4)Android Tools -> Export Android application
2、禁止设置 allowBackup:
编辑 AndroidManifest.xml 文件,在 application 标签以及每个 activity 标签增加如下属性:
1 | android:allowBackup="false" |
3、检查 BroadcastReceiver 组件暴露风险
分为如下情形:
1)组件无需暴露
如果仅在应用内部通信,可以使用私有receiver。在AndroidManifest.xml为组件加上属性:
1 | android:exported="false" |
该receiver可以接收相同应用程序组件或带有相同用户ID的应用程序所发出的消息。
2)组件需要暴露
分两种情况:
2.1)仅暴露给自己或同一公司的其他应用
方案A:
在AndroidManifest.xml为组件加上属性:
1 | android:protectionLevel="signature" |
并为被调用组件添加该权限限制:
1 | <Receiver android:name=".TestReceiver" android:permission="myapp.permission.CALL_MYSERVICE"/> |
方案B:
在组件实现代码中使用Context.checkCallingPermission()检查调用者是否拥有权限。
2.2)需暴露给第三方应用
仔细审查组件的代码,保证组件功能可控,避免出现能力泄露或权限重委派(获得额外权限的攻击)等风险,严格校验所有外部输入参数,避免出现空对象引用导致拒绝服务。
另:动态注册组件安全建议:
使用本地广播管理器LocalBroadcastManager注册;
使用registerReceiver(BroadcastReceiver, IntentFilter, permission, Handler) 代替registerReceiver(BroadcastReceiver, IntentFilter),且确保私有权限经过验证签名校验。