APP安全问题

数据安全:

  1. 未防御屏幕录制:

    在一些涉及隐私的操作界面,禁止屏蔽录屏/截图事件。可以在一定程度上避免用户的信息泄露
    解决:

     //禁止截屏
     this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
     //清除禁止截屏标志
     winddow.clearFlags(WindowManager.LayoutParams.FLAG_SECURE);
    
  2. 广播信息泄露

    广播发送者没有对广播接收者设置门槛,导致广播发送的消息可以被任意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");
    
  3. 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(...);
}

 

加密安全

  1. 不安全哈希算法 APP 使用 MD5/SHA-1 加密算法时,存在加密数据被碰撞的风险。

     解决:使用 SHA-256 对数据进行加密。
    

 

代码安全

  1. WebView暴露危险接口 
    APP 在 Android API level ≤16使用addJavascriptInterface方法,并且未移除危险接口时,存在信息泄漏和被远程控制的风险。

     解决:
     1.避免在 API level ≤16 使用 addJavascriptInterface。 
     2.在必须使用 addJavascriptInterface 时确保显式移除 searchBoxJavaBridge_、accessibility、accessibilityTraversal。
    

 

组件安全

  1. ContentProvider Uri用户敏感信息泄露
    APP使用 ContentProvider 提供对外数据访问接口时,未设置合理权限,存在信息泄漏风险。

  2. Activity组件暴露
    APP 导出的 Activity 组件未设置合理的权限,存在功能被滥用或信息泄漏的风险。
    android:exported 该属性指示了content provider是否可以被其他应用程序使用。
    当minSdkVersion或者targetSdkVersion小于16时该属性的默认值是true;当大于17时,该属性默认值为false。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值