这里主要涉及到了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应用安全——组件通信安全(Intent)的更多相关文章

  1. 【Android实验】组件通信Intent

    实验目的 [TOC] 了解使用Intent进行组件通信原理 掌握使用Intent启动Activity的方法 熟悉和掌握Android组件间通信的方式和技巧 实验要求 设计一个主Activity和一个子 ...

  2. android学习日记20--连接组件之Intent和IntentFilter

    上次刚了解完Android的四大组件,现在学习组件间通信的Intent和IntentFilter 一.Intent 1.简述 Intent(意图)在应用程序运行时连接两个不同组件,是一种运行时的绑定机 ...

  3. Android组件系列----Intent详解(转载笔记)

    [正文] Intent组件虽然不是四大组件,但却是连接四大组件的桥梁,学习好这个知识,也非常的重要. 一.什么是Intent 1.Intent的概念: Android中提供了Intent机制来协助应用 ...

  4. Android组件系列----Intent详解

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  5. Android 四大组件和Intent

    一.Android有四大组件(component):Activity.Service.BroadcastReceiver.ContentProvider. 1.Activity 通过startActi ...

  6. Android四大组件之Intent

    Intent不是android几大组件框架,但是确实是android 各大组件之间沟通的桥梁. 尤其Intent对于activity有很大的关系. 一下是我个人对task以及backstack的总结.

  7. Android消息传递之组件间传递消息

    前言: 上篇学习总结了Android通过Handler消息机制实现了工作线程与UI线程之间的通信,今天来学习一下如何实现组件之间的通信.本文依然是为学习EventBus做铺垫,有对比才能进步,今天主要 ...

  8. Android --差缺补漏之 Intent&putExtra()

    伴随着Android Developers 的开发,再也不用FQ了,这意味着Android 对中国学习者有着越来越多的官方学习资料,学习起来有更明确的方向和目标. Android Developer ...

  9. Android四大基本组件介绍与生命周期

    Android四大基本组件介绍与生命周期 Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器 ...

随机推荐

  1. Mysql中的排序规则utf8_unicode_ci、utf8_general_ci的区别

    utf8_unicode_ci和utf8_general_ci对中.英文来说没有实质的差别.utf8_general_ci 校对速度快,但准确度稍差.utf8_unicode_ci 准确度高,但校对速 ...

  2. Python-装饰器进阶

    基本概念 具体概念请先看之前的文章 理解装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理, Web权限校验, Cache等. 很有名的例子,就 ...

  3. 安装python3.6后使用pip报错

    安装python3.6后,pip是一起安装好的,安装目录再C:\Programs\Python\Python36-32\Scripts中. 在python终端模式下使用pip出现错误如下: 错误原因: ...

  4. 并且需要用websocket实时接收数据 VS 组件ng2websocket的

    chart.service.ts: import { Injectable } from '@angular/core'; import { WebSocketService } from './we ...

  5. 点滴积累【C#】---Highcharts图形统计

    效果: 思路: 后台获取数据!然后拼接为前台所要求的格式,再将拼接好的StringBuilder给了hidden控件! 然后前台获取JQuery获取Hidden的值,最后将值赋给图形! 代码: [前台 ...

  6. Redis_发布订阅(Spring Boot)

    目录 前言 生产者和消费者 发布和订阅 Java实现 注意 转至 http://www.tianmaying.com/tutorial/springboot-redis-message 前言 利用Sp ...

  7. 谈一谈APP版本号问题

    如题:谈一谈APP版本号问题 为什么要谈这个问题,周五晚上11~12点,被微信点名,说APP有错,无效的版本号,商城无法下单.我正在准备收拾东西,周末回老家,结果看到这样问题,菊花一紧.我擦,我刚加的 ...

  8. Jquery学习笔记(10)--ajax删除用户,使用了js原生ajax

    主要复习了php的pdo数据库操作,和js的ajax,真麻烦,希望jquery的ajax简单点. index.php: <!DOCTYPE html> <html lang=&quo ...

  9. HTML5七巧板canvas绘图(复习)

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  10. VS2015调用Matlab2017a环境配置(转载)

    VS2015调用Matlab2017a环境配置 一定要在Debug+x64平台下进行配置,x64,x64,x64!!!* 1.配置环境变量 右键计算机—–>属性——>高级系统设置——> ...