数据安全:
-
未防御屏幕录制:
在一些涉及隐私的操作界面,禁止屏蔽录屏/截图事件。可以在一定程度上避免用户的信息泄露
解决://禁止截屏 this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE); //清除禁止截屏标志 winddow.clearFlags(WindowManager.LayoutParams.FLAG_SECURE);
-
广播信息泄露
广播发送者没有对广播接收者设置门槛,导致广播发送的消息可以被任意APP接收,从而造成广播信息泄露。 参考
解决方案一:LocalBroadcastManager (局部广播)优点: 1.因广播数据在本应用范围内传播,你不用担心隐私数据泄露的问题。 2.不用担心别的应用伪造广播,造成安全隐患。 3.相比在系统内发送全局广播,它更高效。 缺点: 1.它只能够在同一个进程使用。 2.它只能够动态注册和取消。
解决方案二:intent 指定包名Intent.setPackage设置广播仅对本程序有效
优点: 1.支持跨进程 2.receiver可以是静态注册也可以是动态注册。 3.只有指定的包名的应用程序才能够接收到数据,所以安全性较高。 缺点: 1.如果一旦反编译,很容易伪造广播,造成安全隐患 2.在系统内发生全局广播,它效率较低 3.它只能够满足一个应用的需求,不能够同时指定多个
解决方案三:指定某一个receiver允许接收,intent 指定包名Intent. setComponent设置广播仅对相同包名的有效
优点: 1.可以指定到具体某一个receiver,安全性更高 2.receiver可以是静态注册也可以是动态注册。 缺点: 1.它只能指定一个receiver,局限性较大
解决方案四:指定多个应用有权接收。
sendBroadcast(Intent,String)的接口在发送广播时指定接收者必须具备的permission。如果担心反编译后,权限被窃取,限制失效。可以在声明权限时,提高权限的 leverl为签名验证,即只有相同签名的应用且有该权限才能够接收,这样就能够满足产品簇的问题。 <permission android:description="@string/XXX" android:label="XXXX" android:name=" com.test.permission" android:protectionLevel=" signature"> //protectionLevel==权限级别 signature表示只有拥有相同签名文件的app才能使用该权限 <receiver android:name="XXXX" android:permission="com.test.permission" > <intent-filter > <action android:name="XXXXX" /> </intent-filter> </receiver> Intent intent = new Intent(); intent.setAction("消息action"); sendBroadcast(intent, "com.test.permission");
-
Logcat泄露隐私敏感信息漏洞。 参考 解决:混淆去掉
-assumenosideeffects class android.util.Log {
public static boolean isLoggable(java.lang.String,int);
public static int v(...);
public static int i(...);
public static int w(...);
public static int d(...);
public static int e(...);
}
-assumenosideeffects class java.io.PrintStream {
public *** println(...);
public *** print(...);
}
加密安全
-
不安全哈希算法 APP 使用 MD5/SHA-1 加密算法时,存在加密数据被碰撞的风险。
解决:使用 SHA-256 对数据进行加密。
代码安全
-
WebView暴露危险接口
APP 在 Android API level ≤16使用addJavascriptInterface方法,并且未移除危险接口时,存在信息泄漏和被远程控制的风险。解决: 1.避免在 API level ≤16 使用 addJavascriptInterface。 2.在必须使用 addJavascriptInterface 时确保显式移除 searchBoxJavaBridge_、accessibility、accessibilityTraversal。
组件安全
-
ContentProvider Uri用户敏感信息泄露
APP使用 ContentProvider 提供对外数据访问接口时,未设置合理权限,存在信息泄漏风险。 -
Activity组件暴露
APP 导出的 Activity 组件未设置合理的权限,存在功能被滥用或信息泄漏的风险。
android:exported 该属性指示了content provider是否可以被其他应用程序使用。
当minSdkVersion或者targetSdkVersion小于16时该属性的默认值是true;当大于17时,该属性默认值为false。