Android四大组件安全问题

Activity

  • AndroidMainfest 配置 android:exported="false", 其它应用不可以调用
  • 检测栈顶 Activity, 防止页面被劫持
  • WebView 加载网页发生证书认证错误时, 会调用 WebViewClient 类的 onReceivedSslError 方法, 如果该方法实现调用了 handler.proceed() 来忽略该证书错误, 则会受到中间人攻击的威胁, 可能导致隐私泄露。当发生证书认证错误时, 采用默认的处理方法 handler.cancel(), 停止加载页面
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.addJavascriptInterface(new JsBridge(mContext), JS_OBJECT);
    mWebView.loadUrl("http://www.xxxx.com/");
    mWebView.setWebViewClient(new WebViewClient() {
        @Override
        public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
            handler.proceed(); // 忽略SSL证书错误(错误做法)
            handler.cancel();  // 停止加载页面(正确做法)
        }
    });
  • WebView 检查是否明文保存密码, 使用 WebView.getSettings().setSavePassword(false) 来禁止保存密码
  • WebView 检测是否使用 addJavascriptInterface 接口, 如果使用了需要将 minSdkVersion 提升至 17 (Android 4.2), 或者使用一些第三方的库来解决注入漏洞

BroadcastReceiver

  • 使用 LocalBroadcastManager 处理应用内部的广播
  • 应用间使用广播, 通过自定义权限和设置 android:protectionLevel, 同时要避免敏感数据的传递
  • 不要使用 sendStickyBroadcastsendStickyXXXAndroid SDK 文档中明确说明了存在安全问题的 API

Service

  • AndroidMainfest 配置 android:exported="false", 其它应用不可以调用
  • 通过 Intent.getXXXExtra() 获取数据时进行以下判断, 以及用 try catch 捕获所有异常, 以防止应用出现拒绝服务漏洞
  1. 空指针异常
  2. 类型转换异常
  3. 数组越界访问异常
  4. 类未定义异常
  5. 其他异常

ContentProvider

  • 定义了私有权限, 但是没有定义私有权限的级别, 或者定义的权限级别不够, 导致恶意应用只要声明这个权限就能够访问到相应的 Content Provider 提供的数据, 造成数据泄露
  • Content Provider 的数据源是 SQLite 数据库时, 如果实现不当, 而 Provider 又是暴露的话, 则可能会引发本地 SQL 注入漏洞
  • 防止目录遍历漏洞, 去除 Content Provider 中没有必要的 openFile() 接口, 过滤限制跨域访问, 对访问的目标文件的路径进行有效判断
  • 正确的定义私有权限
<permission android:description="string resource"
            android:icon="drawable resource"
            android:label="string resource"
            android:name="string"
            android:permissionGroup="string"
            android:protectionLevel=["normal" | "dangerous" | "signature" | "signatureOrSystem"] />

android:protectionLevel 参数说明

属性

描述

normal

默认值, 低风险权限, 在安装的时候, 系统会自动授予权限

dangerous

高风险权限, 如发短信, 打电话, 读写通讯录。使用此 protectionLevel 来标识用户可能关注的一些权限。Android 将会在安装程序时, 警示用户关于这些权限的需求

signature

签名权限, 当应用程序所用签名与声明引权限的应用程序所用签名相同时, 才能将权限授给它

signatureOrSystem

除了具有相同签名的 APP 可以访问外, Android 系统中的程序也有权限访问

我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=593nbbkwdbbe

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏极客猴

Android设计模式之MVP

最近利用业余时间来深入学习MVP模式,我把自己对MVP模式的理解分享给大家,希望能给你理解MVP模式提供帮助。

15210
来自专栏极客猴

你该制定个新年计划

时间如握在手心中的沙子,缓缓地流失。我们稍不注意,一年光阴就流逝而去。在过去一年内,你可能实现年初制定的计划,或许离目标还有一步之遥,也许你已经把计划抛到九霄云...

12730
来自专栏极客猴

Android中广播实践小结

Android系统有一套广播消息机制,方便进行每个应用程序之间的消息通知。而且广播接受者作为Android四大组件之一,经常被使用到。我也接触到广播消息机制,因...

8210
来自专栏极客猴

如何优雅地进行序列化操作

需要使用Gson或者Fastjson第三方的库,将对象转化为json数据。 我在这里使用Gson做示范。

8930
来自专栏极客猴

Android 6.0动态获取权限

Android系统的市场占有率不断攀升,智能手机的全面普及。这也给恶意软件、木马程序滋生提供了丰富营养。这些恶意软件、木马程序会对用户的敏感数据进行读写操作,用...

8010
来自专栏一个会写诗的程序员的博客

第14章 使用Kotlin 进行 Android 开发(2)

我们使用 fastjson 来解析这个数据。在 app 下面的 build.gradle中添加依赖

11520
来自专栏Jerry的SAP技术分享

Cordova插件中JavaScript代码与Java的交互细节介绍

在Cordova官网中有这么一张架构图:大家看右下角蓝色的矩形框"Custom Plugin"——自定义插件。意思就是如果您用Cordova打包Mobile应用...

12520
来自专栏ATYUN订阅号

谷歌重磅推出Android Pie,以AI为驱动

谷歌今天透露,Android P代表Android Pie,接替Android Oreo,并将最新的源代码推送到Android开源项目(AOSP)。谷歌移动操作...

9220
来自专栏华章科技

大数据告诉你,最不受欢迎的编程语言居然是……

导读:哪些编程语言被开发者喜欢?哪些让人讨厌?笔者通过在Stack Overflow分析用户创建的开发者履历,得出了最不受开发者欢迎的编程语言,还有最受开发者欢...

10710
来自专栏一个会写诗的程序员的博客

java.lang.SecurityException: Permission denied (missing INTERNET permission?)

E/AndroidRuntime: FATAL EXCEPTION: Thread-4 Process: com.easy.kotlin, PID: 5384...

26520

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励