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 张兴业
*  http://blog.csdn.net/xyz_lmn
*  android开发进阶群: 241395671
*/


        

参考:android安全-intent

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

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




     本文转自xyz_lmn51CTO博客,原文链接:http://blog.51cto.com/xyzlmn/1230744,如需转载请自行联系原作者


相关文章
|
1月前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
2月前
|
存储 Android开发 开发者
深入理解安卓应用开发的核心组件
【10月更文挑战第8天】探索Android应用开发的精髓,本文带你了解安卓核心组件的奥秘,包括Activity、Service、BroadcastReceiver和ContentProvider。我们将通过代码示例,揭示这些组件如何协同工作,构建出功能强大且响应迅速的应用程序。无论你是初学者还是资深开发者,这篇文章都将为你提供新的视角和深度知识。
|
2月前
|
数据可视化 Android开发 开发者
安卓应用开发中的自定义View组件
【10月更文挑战第5天】在安卓应用开发中,自定义View组件是提升用户交互体验的利器。本篇将深入探讨如何从零开始创建自定义View,包括设计理念、实现步骤以及性能优化技巧,帮助开发者打造流畅且富有创意的用户界面。
95 0
|
15天前
|
XML 搜索推荐 前端开发
安卓开发中的自定义视图:打造个性化UI组件
在安卓应用开发中,自定义视图是一种强大的工具,它允许开发者创造独一无二的用户界面元素,从而提升应用的外观和用户体验。本文将通过一个简单的自定义视图示例,引导你了解如何在安卓项目中实现自定义组件,并探讨其背后的技术原理。我们将从基础的View类讲起,逐步深入到绘图、事件处理以及性能优化等方面。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。
|
16天前
|
存储 安全 Android开发
探索Android系统的最新安全特性
在数字时代,智能手机已成为我们生活中不可或缺的一部分。随着技术的不断进步,手机操作系统的安全性也越来越受到重视。本文将深入探讨Android系统最新的安全特性,包括其设计理念、实施方式以及对用户的影响。通过分析这些安全措施如何保护用户免受恶意软件和网络攻击的威胁,我们希望为读者提供对Android安全性的全面了解。
|
2月前
|
XML 前端开发 Java
安卓应用开发中的自定义View组件
【10月更文挑战第5天】自定义View是安卓应用开发的一块基石,它为开发者提供了无限的可能。通过掌握其原理和实现方法,可以创造出既美观又实用的用户界面。本文将引导你了解自定义View的创建过程,包括绘制技巧、事件处理以及性能优化等关键步骤。
|
2月前
|
测试技术 数据库 Android开发
深入解析Android架构组件——Jetpack的使用与实践
本文旨在探讨谷歌推出的Android架构组件——Jetpack,在现代Android开发中的应用。Jetpack作为一系列库和工具的集合,旨在帮助开发者更轻松地编写出健壮、可维护且性能优异的应用。通过详细解析各个组件如Lifecycle、ViewModel、LiveData等,我们将了解其原理和使用场景,并结合实例展示如何在实际项目中应用这些组件,提升开发效率和应用质量。
52 6
|
3月前
|
存储 开发框架 数据可视化
深入解析Android应用开发中的四大核心组件
本文将探讨Android开发中的四大核心组件——Activity、Service、BroadcastReceiver和ContentProvider。我们将深入了解每个组件的定义、作用、使用方法及它们之间的交互方式,以帮助开发者更好地理解和应用这些组件,提升Android应用开发的能力和效率。
267 5
|
2月前
|
存储 大数据 数据库
Android经典面试题之Intent传递数据大小为什么限制是1M?
在 Android 中,使用 Intent 传递数据时存在约 1MB 的大小限制,这是由于 Binder 机制的事务缓冲区限制、Intent 的设计初衷以及内存消耗和性能问题所致。推荐使用文件存储、SharedPreferences、数据库存储或 ContentProvider 等方式传递大数据。
88 0
|
2月前
|
安全 网络安全 Android开发
深度解析:利用Universal Links与Android App Links实现无缝网页至应用跳转的安全考量
【10月更文挑战第2天】在移动互联网时代,用户经常需要从网页无缝跳转到移动应用中。这种跳转不仅需要提供流畅的用户体验,还要确保安全性。本文将深入探讨如何利用Universal Links(仅限于iOS)和Android App Links技术实现这一目标,并分析其安全性。
372 0