关于BroadCastReceiver安全性的思考
尊重原创:http://blog.csdn.net/yuanzeyao/article/details/38948863
BroadCastReceiver是Android 四大组件之中的一个,应用非常广泛。也非常简单,可是我们平时在使用的过程中忽略了一个安全问题。
别人非常easy通过反编译获取到我们应用中的广播,然后频繁的向你的App中发送广播,这个当然是我们不想看到的现象,那么怎样避免应用中注冊的广播响应其它应用发送的广播呢?在解决问题之前。我们先来了解一下怎样发送一个广播。
在Android中发送一个广播通常有两种方式:显示和隐式
显式:
Intent intent=new Intent(this,MyBroadCastReceiver.class);
this.sendBroadcast(intent);
所谓显示,就是通过制定你要发送的哪个广播。如上例中的MyBroadCastReceiver这个广播
隐式:
Intent intent=new Intent("com.demo.action");
this.sendBroadcast(intent);
所谓隐式就是通过action来匹配广播,对于匹配成功的广播就会响应
对于显示的广播除非是别人有益攻击。一般非常少出现响应别人的广播,可是对于隐式的广播就非常easy出现上述问题。由于action非常easy是一样的,一旦是一样的就出问题了。
以下就来提出解决方式:
第一种方案:
在自己的应用中,在manifest.xml中注冊receiver的时候增加export属性,例如以下:
<receiver android:name="com.baroad.demo.MyBroadCastReceiver" android:exported="false">
<intent-filter >
<action android:name="com.demo.action"/> </intent-filter>
</receiver>
增加这个属性之后,这个广播不会响应外部广播的
另外一种方案:
自己定义权限,在manifest.xml中增加自己定义权限,然后再响应的BroadCastReceiver中增加这个权限就可以
<permission
android:name="com.yzy.permission.STARTBROAD"
android:protectionLevel="normal">
然后将上面的权限注冊到BroadCastReceiver
<receiver android:name="com.baroad.demo.MyBroadCastReceiver" android:permission="com.yzy.permission.STARTBROAD">
<intent-filter >
<action android:name="com.demo.action"/> </intent-filter>
</receiver>
第三种方案:
前面两种方案都是在接收广播的地方设置。第三种是在发送方便的地方设置,设置你的广播对哪个报名有效
Intent intent=new Intent("com.demo.action");
intent.setPackage("com.two.demo");
this.sendBroadcast(intent);
第四种方案:
使用LocalBroadcastManager来实现广播
private LocalBroadcastManager mLocalBroadcastManager;
private BroadcastReceiver mReceiver;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); IntentFilter filter = new IntentFilter();
filter.addAction("com.demo.action"); mReceiver = new MyBroadCastReceiver();
mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
mLocalBroadcastManager.registerReceiver(mReceiver, filter);
}
public void start(View view)
{
mLocalBroadcastManager.sendBroadcast(new Intent("com.demo.action"));
}
@Override
protected void onDestroy() {
mLocalBroadcastManager.unregisterReceiver(mReceiver);
super.onDestroy();
}
好了,就介绍到这里吧,通过以上四种方案,就能够避免自己的应用程序响应其它应用的广播
关于BroadCastReceiver安全性的思考的更多相关文章
- 有 a - b < c 对Java安全性的思考
软件工程中,不论使用哪种开发语言,安全性一直是一个非常棘手却又重要的问题.安全性是软件开发领域永远的主题之一,而且随着互联网的蜂拥发展而带动的新技术的兴起与革命(比如近几年火起来的node.js,py ...
- 对于api安全性的思考
目前的情况下api被很多地方应用,随之而来的是api的安全性问题. 我所认识到的安全性问题有以下几个方面: 1.DDoS(拒绝服务攻击),接口被恶意调用,使真实的用户无法享受到正常畅通的服务. ...
- Android:广播接收器(BroadCastReceiver)要点随笔。
@@@描述 广播接收器可以收到 Context.sendBroadcast或者Context.sendOrderedBroadcast发出的意图(intent). @@@Local ...
- 开放平台API接口安全策略汇总
在设计开放平台接口过程中,往往会涉及接口传输安全性相关的问题,本文对接口加密及签名的相关知识做了一个总结,在方便自己查阅的同时也分享给大家做一些参考. 接口安全性问题思考 接口安全性问题主要来源于几方 ...
- mysql数据库之 存储引擎、事务、视图、触发器、存储过程、函数、流程控制、数据库备份
目录 一.存储引擎 1.什么是存储引擎? 2.mysql支持的存储引擎 3. 使用存储引擎 二.事务 三.视图 1.什么是视图 2.为什么要用视图 3.如何用视图 四.触发器 为何要用触发器 创建触发 ...
- TCP / IP 精彩回顾-必看
TCP/IP 协议出现的原因是互联网世界各个主机作为一个个独立的个体,如何制定统一的规则让他们互相通信是达成万物互联的纽带.基于此,设定了 TCP/IP 协议来规范网络访问行为.TCP/IP 并不是一 ...
- Android用户登录机制安全性的一些思考
1 client要做到安全存贮数据非常难,通过反编译和强攻.仅仅要有心,差点儿都能够破解. 2 服务端相对安全. 3 结合以上两点,推出能做的点是控制灾难规模.每次破解一个client仅仅能针对 ...
- Android探索之BroadcastReceiver具体使用以及安全性探究
前言: 最近的计划是学习一下iOS的NSNotificationCenter,突然想起来的Android的广播机制,所以还是觉得先对BroadcastReceiver来个全面的总结然后再去学习NSNo ...
- 由一次安全扫描引发的思考:如何保障 API 接口的安全性?
引言 前段时间,公司对运行的系统进行了一次安全扫描,使用的工具是 IBM 公司提供的 AppScan . 这个正所谓不扫不要紧,一扫吓一跳,结果就扫出来这么个问题. 我们的一个年老失修的内部系统,在登 ...
随机推荐
- pku oj overhang叠加卡片求最少的卡片数
这个估计是里面第二简单的了,因为第一简单的是求a+b 哈哈,一submit就ac了 题目如下: Description How far can you make a stack of cards ov ...
- C语言 · 运用结构体的排序方法
之前遇到排序只想着最原始的方法,诸如冒泡,选择,快速排序等等,刚刚跟大牛学会了结构体的方法来排序,这样的话以后再也不用怕成绩统计.名次排序之类的题目了. 首先头文件(基于大牛的方法,本人之后做题喜欢引 ...
- (转)windows环境vue+webpack项目搭建
首先,vue.js是一种前端框架,一般利用vue创建项目是要搭配webpack项目构建工具的,而webpack在执行打包压缩的时候是依赖node.js的环境的,所以,要进行vue项目的开发,我们首先要 ...
- springboot集成AOP管理日志
如何将所有的通过url的请求参数以及返回结果都输出到日志中? 如果在controller的类中每个方法名都写一个log输出肯定是不明智的选择. 使用spring的AOP功能即可完成. 1. 在pom. ...
- http抓包工具
fiddler 可以用该工具抓包并修改对应的参数数据
- C++ 递归实现汉诺塔
C++实现汉诺塔 #include <iostream> using namespace std; void move(int n,char x,char y,char z) { ) { ...
- 【C】——压缩字符串
编一个函数,输入一个字符串,要求做一个新字符串,把其中所有的一个或多个连续的空白字符都压缩为一个空格.这里所说的空白包括空格.'\t'.'\n'.'\r'.例如原来的字符串是: This Conten ...
- 外部引用CSS中 link与@import的区别
差别1:link属于XHTML标签,而@import完全是CSS提供的一种方式. link标签除了可以加载CSS外,还可以做很多其它的事情,比如定义RSS,定义rel连接属性等,@import就只能加 ...
- ES学习2
1:es中的分页 一般搜索引擎中的分页都不会提供很大的页面查询,因为查询的页码越大,查询效率越低. 例子: 我们就先预想一下我们在搜索一个拥有5个主分片的索引.当我们请求第一页搜索的时 候,每个分片产 ...
- Java多例模式
多例模式又划分为有上限多例模式和无上限多例模式两种,没上限的多例模式和直接 new 一个对象没什么差别,此处不做记录. 有上限多例模式:实际上是单例模式的推广,如果它的上限是1,那么就成了单例模式了. ...