概述

移动应用开发中,往往有跨进程通信的需求,方便地实现程序间的数据共享。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的更多相关文章

  1. 移动应用安全开发指南(Android)--完结篇(http://www.bubuko.com/infodetail-577312.html)

    1.认证和授权 概述 认证是用来证明用户身份合法性的过程,授权是用来证明用户可以合法地做哪些事的过程,这两个过程一般是在服务器端执行的,但也有的APP出于性能提升或用户体验等原因,将其做在客户端完成, ...

  2. 移动应用安全开发指南(Android)--完结篇

    如果IE显示格式不正常,请使用chrome浏览器 1.认证和授权 概述 认证是用来证明用户身份合法性的过程,授权是用来证明用户可以合法地做哪些事的过程,这两个过程一般是在服务器端执行的,但也有的APP ...

  3. HarmonyOS三方件开发指南(14)-Glide组件功能介绍

    <HarmonyOS三方件开发指南>系列文章合集 引言 在实际应用开发中,会用到大量图片处理,如:网络图片.本地图片.应用资源.二进制流.Uri对象等,虽然官方提供了PixelMap进行图 ...

  4. Bmob开发指南【android端】

    作为一个开发者,数据的存储,用户的登陆,验证等操作,对程序来说是必不可少的,下面我们将从Bmob的基本信息开始讲起: [Bmob] 官网:   http://www.bmob.cn/ 帮助文档:htt ...

  5. 移动应用安全开发指南(Android)--数据存储

    1.数据存储 概述 移动应用经常需要在某些场景下(比如用户登录)处理和用户或业务相关的敏感数据,有时候为满足某些业务需求,需要把这些敏感数据存储在本地,如果不对这些数据进行适当处理,就有可能存在敏感信 ...

  6. 移动应用安全开发指南(Android)--数据传输

    概述 移动应用很多时候并非孤立存在,在多数场景下存在前.后台以及第三方服务之间进行数据交互,因此,在网络中传输敏感数据在所难免,如果不使用正确安全的传输方式,有可能存在敏感信息泄漏的风险. 安全准则 ...

  7. 腾讯云安全:开发者必看|Android 8.0 新特性及开发指南

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 背景介绍 谷歌2017 I/O开发者大会今年将于5月17-19日在美国加州举办.大会将跟往年一样发布最新的 A ...

  8. 开发者必看|Android 8.0 新特性及开发指南

    背景介绍 谷歌2017 I/O开发者大会今年将于5月17-19日在美国加州举办.大会将跟往年一样发布最新的 Android 系统,今年为 Android 8.0.谷歌在今年3 月21日发布 Andro ...

  9. Android进程和线程(Android开发指南--译)

    (转自:http://www.cnblogs.com/xitang/archive/2011/09/24/2189460.html) Processes and Threads 译者署名: 呆呆大虾 ...

随机推荐

  1. (转)LSI SAS 1068E Raid CentOS 5.5 安装实例浪潮NF5220系列 分类: linux

    新来了一批服务器,全都是清一色的国产服务器,相同的阵列卡,令人头疼的是Linux标准内核不包含该raid驱动,需要单独安装,如果是新升级内核,肯定需要编译进去该raid驱动.一.先把主板自带的驱动光盘 ...

  2. 4.FireDAC组件快照 二

    TFDUpdateSQL 生成添加,删除,修改SQL语句 TFDMetaInfoQuery 查询数据源信息 TFDEventAlerter 负责处理数据库事件通知 使用TFDEventAlerter类 ...

  3. 【sam复习】用sam实现后缀排序

    没错,一定是无聊到一定境界的人才能干出这种事情. 这个无聊的zcysky已经不满足于用后缀平衡树求sa了,他想用sam试试. 我们回顾下sam的插入过程,如果我们从最后一个state沿着suffix ...

  4. 【bzoj3224】普通平衡树

    看有没有人能发现咯. #include<bits/stdc++.h> #define N 300005 #define rat 4 #define pushup(o) if(o->l ...

  5. 设计模式之笔记--适配器模式(Adapter)

    适配器模式(Adapter) 定义 适配器模式(Adapter),将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 适配器模式 ...

  6. ACE_INET_Addr类 API

    ACE_INET_Addr类,在这个ACE_网络框架中,应该是比较重要的辅助类,该类主要封装了C SOCKET 的地址对象,通过外观封装的模式,把struct sockaddr_in封装在内.方便用户 ...

  7. mysql 1709: Index column size too large. The maximum column size is 767 bytes.

    1709: Index column size too large. The maximum column size is 767 bytes. 修改排序规则解决 utf8_general_ci

  8. shell中引号的作用(转)

    引号的作用 1 双引号(“”) 1)使用””可引用除字符$(美元符号).`(反引号).\(反斜线)外的任意字符或字符串.双引号不会阻止shell对这三个字符做特殊处理(标示变量名.命令替换.反斜线转义 ...

  9. 设置Eclipse/MyEclipse中编辑界面点击任何文件后Package Explorer导航自动定位该文件

    原文:http://www.myexception.cn/eclipse/425836.html 设置步骤: 导航Package Explorer的右上角有一个黄色双向箭头图标,鼠标移动到上面提示“L ...

  10. 深度学习方法:受限玻尔兹曼机RBM(四)对比散度contrastive divergence,CD

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入 上篇讲到,如果用Gibbs Sa ...