Android 组件安全

1、Activity、Service、BroadcastReceiver、ContentProvider是Android的四大组件,他们的安全性是非常重要的。四大组件的安全漏洞主要集中在是否可以被外部调用,外部调用是否存在风险。

四大组件是否可以被外部调用,决定因素是在AndroidManifest.xml里面定义的四大组件的标签export的布尔值。如下:

<activity
            android:name=".PartActivity"
            android:theme="@android:style/Theme.Dialog"
            android:export="true">
</activity>  

export为true,表示PartActivity可以被外部调用。export如果为false,表示PartActivity不可以被外部调用。

我们注意到我们在定义四大组件时,经常是不写export这个标签的,那么系统默认的export是什么呢?

(1)、如果四大组件包含intent-filter,那么Android系统认为这个组件可以被外部通过隐式调用,所以默认export为true。

<activity
            android:name=".MainActivity"
            android:label="MainActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />  

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
</activity>

(2)、如果四大组件不包含intent-filter,那么Android系统认为这个组件值只可以被内部通过显式调用,所以默认export为false。

<activity
            android:name=".PartActivity"
            android:theme="@android:style/Theme.Dialog" >
</activity>

2、为了增加四大组件的安全,可以定义访问某个组件需要某个权限。

	<activity
				android:name=".PartActivity"
				android:theme="@android:style/Theme.Dialog" >
				android:permission="com.example.test.permission"
	</activity>

	<permission android:name="com.example.test.permission"
			android:protectionLevel="dangerous"
			android:label="test"
			android:description="test_permission" />  

如果需要使用必须在AndroidManifest.xml,通过申请权限可以,另外也要注意protectionLevel,如果是Signature,那么只有和这个应用使用相同私钥签名的应用才可以申请这个权限。

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

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


组件名称


方法名称


Activity


startActivity()

startActivityForResult()


Service


startService()

bindService()


Broadcasts


sendBroadcast()

sendOrderedBroadcast()

sendStickyBroadcast()

sendBroadcast,有一个方法,可以不用在AndroidManifest.xml里面声明,uses-permission;直接发送时附带权限,sendBroadcast(intent, receiverPermission)。动态注册的receiver可以在代码中指定需要访问它所需要的权限。

4、ContentProvider安全

<provider
    android:name=".StudentContentProvider"
    android:authorities="com.example.loadermanagerdemo.StudentContentProvider"
	android:readPermission="com.example.testapps.readPermission"
	android:writePermission="com.example.testapps.writePermission"
	>
</provider>

需要读contentProvider时,要申请readPermission,需要写contentProvider时,需申请writePermission。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-30 08:36:07

Android 组件安全的相关文章

Android组件化

附:Android组件化和插件化开发 App组件化与业务拆分那些事 Android项目架构之业务组件化 Android组件化核心之路由实现

Android组件之间的信使——Intent

从一个Activity启动到另一个Activity可以使用startActivity()方法或者是startActivityForResult()方法 第一种:直接启动一个ActivityIntent intent = new Intent(Main.this, SecondActivity.class);startActivity(intent); 第二种:启动另一个Activity并返回结果作用:当从第二个Activity回跳到前一个Activity的时候,就不再需要使用startActiv

Android组件学习之ExpandableListView

一个简单的小例子: 可以展开的ListView,和Listview差不多,只是设置的Adapter不同.常用的Adapter有BaseExpandableListAdapter.SimpleExpandableListAdapter.SimpleCursorTreeAdapter 布局如下:(布局中我设置了android:groupIndicator,不知道为什么不起作用.另外,android:dividerHeight这个属性是组对象和子节点共用的.如果要定义比较复杂的组视图及子节点视图,还是

[Android]组件-进度条1

多式样ProgressBar 普通圆形ProgressBar 该类型进度条也就是一个表示运转的过程,例如发送短信,连接网络等等,表示一个过程正在执行中. 一般只要在XML布局中定义就可以了. <progressBar android:id="@+id/widget43" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layou

[Android]组件之进度条2

这个例子不错,详细讲解了alertdialog及LayoutInflater的用法: main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:lay

Android组件间的相互调用

我们研究两个问题,1.Service如何通过Broadcaster更改activity的一个TextView.(研究这个问题,考虑到Service从服务器端获得消息之后,将msg返回给activity) 2.Activity如何通过Binder调用Service的一个方法.(研究这个问题,考虑到与服务器端交互的动作,打包至Service,Activity只呈现界面,调用Service的方法) 结构图见如下:效果图如下:点击“start service”按钮,启动Service,然后更改Activ

自定义Android组件之组合方式创建密码框组件

Android中所有控件(也称组件)都继承自adnroid.view.View类,android.view.ViewGroup是View类的重要子类,绝大多书的布局类就继承自ViewGroup类. 附上一张基于Android Api21的View和Widget类图 自定义Android组件基本可以从2个入口着手,一是继承Viewe类拿起画笔和画布绘制组件,而是通过继承View的子类和组合已有的组件的方式构造自定义的组件. 本文通过自定义一个PassWordView组件来实现密码能够通过点击点选框

【Android开发精要笔记】Android组件模型解析

Android组件模型解析 Android中的Mashup 将应用切分成不同类别的组件,通过统一的定位模型和接口标准将他们整合在一起,来共同完成某项任务.在Android的Mashup模式下,每个组件的功能都可以被充分的复用.来自不同应用的组件可以有机地结合在一起,共同完成任务. 基于Mashup的Android应用模型 三个基本要素:组件.连接.配置 接口就是实现单元.从代码来看,组件就是派生自特定接口或基类的子类的实现,如界面组件Activity就是指派生自android.app.Activ

2015最流行的Android组件、工具、框架大全(转)

转自:2015最流行的Android组件.工具.框架大全 Android 是目前最流行的移动操作系统之一. 随着新版本的不断发布, Android的功能也日益强大, 涌现了很多流行的应用程序, 也催生了一大批的优秀的组件.本文试图将目前流行的组件收集起来以供参考, 如果你发现本文还没有列出的组件,欢迎在评论中贴出来,我会定期的更新本文. 部分图片需国内或许不能访问才能显示 很好的中文教程Google Android官方培训课程中文版 awesome-android, android列表. 另,g

友盟社会化Android组件之第三方登录

前段时间公司需要,逐步了新浪微博.腾讯qq.微信等授权登录验证的问题.如果要一个个申请,看文档写代码也是很多流程的.干脆用友盟社会化Android组件之第三方登录.友盟是集成了这些平台,还有其他主流的平台的.我在这里主要讲一下友盟里面微博登录.先看看友盟是怎么介绍自已的. 一.友盟社会化分享介绍 友盟社会化分享组件,帮助移动应用快速具备微信分享,微博分享.登录.评论.喜欢等社会化组件功能,助力产品推广,并提供实时.全面的社会化数据统计分析服务,是国内最大的社会化分享SDK. 支持各大社交平台 精