移动应用安全开发指南(Android)--Android组件和IPC
|
概述 |
移动应用开发中,往往有跨进程通信的需求,方便地实现程序间的数据共享。Android提供了多种IPC通信的方式,给开发人员带来了便利,但如果选择或使用不当,就有可能发生各种各样的风险。 |
|
|
安全准则 |
A. 应用程序间的数据共享尽量优先采用content provider,尽量不要用带全局读写属性的IPC文件进行进程间通信(比如全局读写的。 B. content provider的独立读写权限设置方法可参考附录5。 C. SQLiteDatabase对象的部分内置方法是可以有效防SQL注入的,比如query(),insert(),update和delete(),另外,。 |
|
|
备注 |
A. 当使用基于socket的IPC方式时,设备上的应用都可以访问该监听端口,最差的情况是端口完全对外开放监听,相当于任何应用都可以通过网络跟该端口进行通信。 B. 当一个组件定义了intent-filter,其android:exported的默认值为true,否则为false。 |
|
注:如果IE浏览器显示格式不正确,请使用chrome浏览器。
附录:
3、SQLite防止SQL注入漏洞方案
11.1.1、使用SQLiteDatabase对象自带的防SQL注入的方法,比如query(),insert(),update和delete():
DatabaseHelper dbhelper = new DatabaseHelper(SqliteActivity.this,"sqliteDB");
SQLiteDatabase db = dbhelper.getReadableDatabase();
/*查询操作,userInputID和userInputName是用户可控制的输入数据 */
Cursor cur = db.query("user", new String[]{"id","name"}, "id=? and name=?", new String[]{userInputID,userInputName}, null, null, null);
/* 插入记录操作*/
ContentValues val = new ContentValues();
val.put("id", userInputID);
val.put("name", userInputName);
db.insert("user", null, val);
/*更新记录操作*/
ContentValues val = new ContentValues();
val.put("id", userInputName);
db.update("user", val, "id=?", new String[]{userInputID });
/*删除记录操作*/
db.delete("user", "id=? and name=?", new String[]{userInputID , userInputName });
11.1.2、正确地使用SQLiteDatabase对象的rawQuery()方法(仅以查询为例):
DatabaseHelper dbhelper = new DatabaseHelper(SqliteActivity.this,"sqliteDB");
SQLiteDatabase db = dbhelper.getReadableDatabase();
/* userInputID和userInputName是用户可控制的输入数据*/
String[] selectionArgs = new String[]{userInputID , userInputName };
String sql = "select * from user where id=? and name=?";//正确!此处绑定变量
Cursor curALL = db.rawQuery(sql, selectionArgs);
11.1.3、以下为错误案例!仅供参考:
DatabaseHelper dbhelper = new DatabaseHelper(SqliteActivity.this,"sqliteDB");
SQLiteDatabase db = dbhelper.getReadableDatabase();
/*案例1:错误地使用rawQuery(),未绑定参数*/
String sql = "select * from user where id='" + userInputID +"'";//错误!动态拼接,未绑定变量
Cursor curALL = db.rawQuery(sql, null);
/*案例2:使用execSQL()方法*/
String sql = "INSERT INTO user values('"+userInputID +"','"+userInputName +"')";//错误同上
db.execSQL(sql);
4、使用signature级别的permission:
在应用的AndroidManifest.xml定义如下:
<!- 声明权限 ->
<permission
android:protectionLevel="signature"
android:name="com.hik.helloworld.activity"/>
<activity
android:name="com.hik.helloworld.TestActivity"
android:label="@string/app_name"
android:exported="false"
<!- 为对应组件使用权限 ->
android:permission="com.hik.helloworld.activity">
</activity>
则只有相同数字签名的应用申请该权限后才可以访问该组件。
5、contentProvider的独立读写权限设置
/* 只允许外部程序对特定Uri进行读操作时的样例设置 */
<provider android:name=". MyContentProvider "
android:authorities=" com.hik.contentprovider.MyContentProvider"
android:exported="true"
android:multiprocess="true"
android:readPermission="
com.hik.contentprovider.MyContentProvider .permission.read">
<path-permission android:pathPattern="/queryData/.*"
android:permission="
com.hik.contentprovider.MyContentProvider .permission.read "/>
</provider>
/* 只允许外部程序对特定Uri进行写操作时的样例设置 */
<provider android:name=". MyContentProvider "
android:authorities=" com.hik.contentprovider.MyContentProvider"
android:exported="true"
android:multiprocess="true"
android:writePermission="
com.hik.contentprovider.MyContentProvider .permission.write">
<path-permission android:pathPattern="/updateData/.*"
android:permission="
com.hik.contentprovider.MyContentProvider .permission.write "/>
</provider>
移动应用安全开发指南(Android)--Android组件和IPC的更多相关文章
- 移动应用安全开发指南(Android)--完结篇(http://www.bubuko.com/infodetail-577312.html)
1.认证和授权 概述 认证是用来证明用户身份合法性的过程,授权是用来证明用户可以合法地做哪些事的过程,这两个过程一般是在服务器端执行的,但也有的APP出于性能提升或用户体验等原因,将其做在客户端完成, ...
- 移动应用安全开发指南(Android)--完结篇
如果IE显示格式不正常,请使用chrome浏览器 1.认证和授权 概述 认证是用来证明用户身份合法性的过程,授权是用来证明用户可以合法地做哪些事的过程,这两个过程一般是在服务器端执行的,但也有的APP ...
- HarmonyOS三方件开发指南(14)-Glide组件功能介绍
<HarmonyOS三方件开发指南>系列文章合集 引言 在实际应用开发中,会用到大量图片处理,如:网络图片.本地图片.应用资源.二进制流.Uri对象等,虽然官方提供了PixelMap进行图 ...
- Bmob开发指南【android端】
作为一个开发者,数据的存储,用户的登陆,验证等操作,对程序来说是必不可少的,下面我们将从Bmob的基本信息开始讲起: [Bmob] 官网: http://www.bmob.cn/ 帮助文档:htt ...
- 移动应用安全开发指南(Android)--数据存储
1.数据存储 概述 移动应用经常需要在某些场景下(比如用户登录)处理和用户或业务相关的敏感数据,有时候为满足某些业务需求,需要把这些敏感数据存储在本地,如果不对这些数据进行适当处理,就有可能存在敏感信 ...
- 移动应用安全开发指南(Android)--数据传输
概述 移动应用很多时候并非孤立存在,在多数场景下存在前.后台以及第三方服务之间进行数据交互,因此,在网络中传输敏感数据在所难免,如果不使用正确安全的传输方式,有可能存在敏感信息泄漏的风险. 安全准则 ...
- 腾讯云安全:开发者必看|Android 8.0 新特性及开发指南
欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 背景介绍 谷歌2017 I/O开发者大会今年将于5月17-19日在美国加州举办.大会将跟往年一样发布最新的 A ...
- 开发者必看|Android 8.0 新特性及开发指南
背景介绍 谷歌2017 I/O开发者大会今年将于5月17-19日在美国加州举办.大会将跟往年一样发布最新的 Android 系统,今年为 Android 8.0.谷歌在今年3 月21日发布 Andro ...
- Android进程和线程(Android开发指南--译)
(转自:http://www.cnblogs.com/xitang/archive/2011/09/24/2189460.html) Processes and Threads 译者署名: 呆呆大虾 ...
随机推荐
- ES的优化布局
分词优化:IK Analyser Elastic Search 5.x官方提供的中文搜索并不友好,分词时经常将一句话分成很多单字,这时候可以使用IK Analyser插件进行优化,当然你在写java代 ...
- 苹果电脑Mac OS系统重装图文详解
苹果电脑Mac OS系统重装图文详解 本文来自于[系统之家] www.xp85.com现在电脑都很强大,可是也很脆弱,常常需要你去维护,甚至经常需要你重装系统,那么Mac OS又如何重装系统呢?刚刚使 ...
- 关于:TypeConverter 无法从 System.String 转换
TypeConverter 无法从 System.String 转换 处理方法: 1: [DX Support Team: The issue was resolved by its Owner] i ...
- FineReport——巧妙实现类tab布局
在FR中,表达form支持局部刷新和tab布局,在报表中,不能做到这样,只能舍弃一些功能来做到类似的tab布局. 首先,在参数面板放一个文本控件temp,用作一个临时值,需要设置一个默认值,而切换是通 ...
- Leetcode 之Binary Tree Postorder Traversal(45)
层序遍历,使用队列将每层压入,定义两个队列来区分不同的层. vector<vector<int>> levelorderTraversal(TreeNode *root) { ...
- 23:django 信号(signal)
django包含了一个“信号分配器”使得当一些动作在框架的其他地方发生的时候,解耦的应用可以得到提醒.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者,这是特别有用的设计因为有些 ...
- Django如何使文件在django自动执行
1. Django admin源码中 admin.py from django.contrib import admin # Register your models here. 在admin源码中 ...
- linux系统使用过程遇到的bug
使用windows与ubuntu双系统,重装windows系统后需要修复ubuntu grub reference ubuntu系统中挂载的windows硬盘点不开 需要重新挂载 reference ...
- AC日记——【模板】点分治(聪聪可可) 洛谷 P2634
[模板]点分治(聪聪可可) 思路: 点分治: (感谢灯神) 代码: #include <bits/stdc++.h> using namespace std; #define maxn 2 ...
- 禁止网页右键和复制,ctrl+a都不行。取消页面默认事件【全】。
document.oncontextmenu=new Function("event.returnValue=false");document.onselectstart=new ...