`
xyz_lmn
  • 浏览: 63044 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

android应用安全——组件通信安全(Intent)

 
阅读更多

这里主要涉及到了Activity、Content Provider、Service、Broadcast Receiver等。这些如果在Androidmanifest.xml配置不当,会被其他应用调用,引起风险。android应用内部的Activity、Service、Broadcast Receiver等,他们通过Intent通信,组件间需要通信就需要在Androidmanifest.xml文件中暴露组件,前面提到的风险就有可能是不恰当的组件暴露引起的。

一、Intent基础知识

Intent启动不同组件的方法如下:

组件名称

方法名称

Activity

startActivity()

startActivityForResult()

Service

startService()

bindService()

Broadcasts

sendBroadcast()

sendOrderedBroadcast()

sendStickyBroadcast()

Intent的两种基本用法:一种是显式的Intent,即在构造Intent对象时就指定接收者;


另一种是隐式的Intent,即Intent的发送者在构造Intent对象时,并不知道也不关心接收


者是谁,有利于降低发送者和接收者之间的耦合。


显示调用例子:


Intent intent =  new  Intent();
intent.setClassName( "com.samples.intent.simple" , 
                     "com.samples.intent.simple.TestActivity" );
startActivity(intent);

Intent intent =  new  Intent(A.activity,B.class);
startActivity(intent);



隐式调用例子


Intent intent =  new  Intent(Intent. ACTION_DIAL );
startActivity(intent);
Intent intent =  new  Intent("com.test.broadcast");
intent.putString("PASSWORD","123456"); 
sendBroadcast(intent);
Intent intent =  new  Intent("com.test.service");
intent.putString("USERNAME","test"); 
startService(intent);


显示调用和隐式调用都能过在不同应用间传递数据。


二、可能产生的风险:

1、恶意调用


2、恶意接受数据


3、仿冒应用,例如(恶意钓鱼,启动登录界面)


4、恶意发送广播、启动应用服务。


5、调用组件,接受组件返回的数据


6、拦截有序广播


上面也是想到了一部分,应用中应该会有更多的例子。


三、怎样避归风险:

1、最小化组件暴露

不参与跨应用调用的组件添加android:exported="false"属性,这个属性说明它是私有的,只有同一个应用程序的组件或带有相同用户ID的应用程序才能启动或绑定该服务。

  <activity
            android:name=".LoginActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait" 
            android:exported="false">



2、设置组件访问权限


参与跨应用调用的组件或者公开的广播、服务设置权限。设置权限如下:


(1)组件添加android:permission属性。


<activity android:name=".Another" android:label="@string/app_name"
           android:permission="com.test.custempermission">


</activity>


(2)声明< permission>属性

<permission android:description="test"  
        android:label="test"  
        android:name="com.test.custempermission"  
        android:protectionLevel="normal">  
    </permission>

protectionLevel有四种级别normal、dangerous、signature、signatureOrSystem。signature、signatureOrSystem时,只有相同签名时才能调用。


(3)调用组件者声明<uses-permission>


<uses-permission android:name="com.test.custempermission" />



3、暴露组件的代码检查


Android 提供各种 API 来在运行时检查、执行、授予和撤销权限。这些 API


android.content.Context类的一部分,这个类提供有关应用程序环境的全局信息。

if (context.checkCallingOrSelfPermission("com.test.custempermission")
        != PackageManager.PERMISSION_GRANTED) {
            // The Application requires permission to access the  
            // Internet");
} else {
    // OK to access the Internet
}


/**
* @author 张兴业
* iOS入门群:83702688
* android开发进阶群:241395671
* 我的新浪微博:@张兴业TBOW
*/


参考:android安全-intent

Android 安全架构及权限控制机制剖析

http://www.ibm.com/developerworks/cn/opensource/os-cn-android-sec/

分享到:
评论

相关推荐

    Android开发与应用——张荣,原书配套课件

    这是Android开发与应用,原书配套的课件,作者张荣,目录如下。 第1章 Android简介 1.1 手机操作系统 1.2 Android起源 1.3 Android特征 1.4 Android体系结构 1.4.1 应用层 1.4.2 应用框架层 1.4.3 ...

    Android应用开发详解pdf.pdf

     第二篇 技术篇第6章 Android组件之间的信使IntentAndroid 组件之间的信使Intent,讲述了Intent对象及其属性、Intent的实现策略和Intent的常见应用  第7章 Android Service组件Android Service组件,讲述了...

    android程序设计ppt

    第一个Android程序、Android常见界面布局、Android基本界面控件、Android高级控件、Android菜单与对话框、Android数据存储、Android电话和短信、Android组件内部通信——Intent、Android服务Service、Android中...

    Android高级编程--源代码

    作为使用androidsdk构建这些应用程序的实用指南书籍,《android高级编程》从始至终穿插了一系列示例项目,每个项目都引入android的新功能和新技术,以助您达到最圆满的学习效果。书中介绍android的所有基本功能,并...

    新版Android开发教程.rar

    • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • 集成的浏览器 基于开源的 WebKit 引擎 • 优化的图形库 包括定制的 2D 图形库, 3D 图形库基于 OpenGL ES 1.0 ...

    Android Activity之间相互调用与传递参数的原理与用法分析

    本文实例讲述了Android Activity之间的相互...在Android中有3大组件:Activity,Service、Broadcast,他们之间的通信都是通过Intent来完成的,所以Intent其实就是告诉他们之间的每一个人,要干什么事情。 创建自己的

    Android典型技术模块开发详解

    第二篇 Android开发关键组件 第3章 Activity(活动) 3.1 什么是任务 3.2 Activity的生命周期 3.3 基本用法 3.3.1 创建Activity 3.3.2 启动Activity 3.3.3 窗口Activity 3.3.4 Activity生命周期验证 3.4 Activity...

    黑马程序员 安卓学院 万元哥项目经理 分享220个代码实例

    |--Activity不允许横竖屏切换 |--Activity常用小技巧 |--Activity按返回直接回到桌面 |--aidl之结合反射获取应用缓存大小等...|--通信之Application实现应用全局通信 |--重启adb |--隐式转换 页面 |--震动效果的实现

Global site tag (gtag.js) - Google Analytics