WEB开发网
开发学院手机开发Android 开发 Android的IBinder接口及其安全性 阅读

Android的IBinder接口及其安全性

 2010-06-01 15:47:00 来源:WEB开发网   
核心提示:Activity对象与Service对象在不同的进程(Process)里执行,各有不同的UID(unix user ID),Android的IBinder接口及其安全性,由于各自独立执行,所以Activity对象通常依赖Intent对象去请求Android启动所需要的Service,至于Android范例程序代码,在此

Activity对象与Service对象在不同的进程(Process)里执行,各有不同的UID(unix user ID)。由于各自独立执行,所以Activity对象通常依赖Intent对象去请求Android启动所需要的Service。

就 Service对象的开发者而言,Activity对象是属于外界(因为两者在不同的进程里执行)的软件,也大多是别人开发的。那么,Service对象如何确定这外来的对象是善意的呢? 这就是安全性的问题了。在Service类别里,可以做权限的检查,其常用指令如下图:

(图)高焕堂讲义之十一:<a target=Android的IBinder接口及其安全性机制" src="http://www.cnmsdn.com/attached/201005/20100531180535_38778.jpg" width="300" height="212" border="0" onload="return imgzoom(this,550);" style="cursor:pointer;" onclick="javascript:window.open(this.src);"/>

当Service确认了对方的善意,就将IBinder接口的参考(Reference)传给Activity对象。Activity对象就能透过IBinder接口去使用Binder的服务了。如下图:

(图)高焕堂讲义之十一:<a target=Android的IBinder接口及其安全性机制" src="http://www.cnmsdn.com/attached/201005/20100531180536_41141.jpg" width="300" height="280" border="0" onload="return imgzoom(this,550);" style="cursor:pointer;" onclick="javascript:window.open(this.src);"/>

当Activity呼叫IBinder的transact()等函数时,会反向呼叫NotifyBinder子类别的onTransact()函数。此时,也可以进行安全检验,例如下图里的指令:

int uid = Binder.getCallingUID();

就能取得对方UID来检验它的身分等。还可以进行checkCallingPermission()等检验。如下图:

(图)高焕堂讲义之十一:<a target=Android的IBinder接口及其安全性机制" src="http://www.cnmsdn.com/attached/201005/20100531180537_77919.jpg" width="300" height="202" border="0" onload="return imgzoom(this,550);" style="cursor:pointer;" onclick="javascript:window.open(this.src);"/>

经检验而确认来客是善意的,就启动BinderServer(如影音播放器)来提供实质的服务。

以上是就Service的开发者角度来看Android的IBinder的安全机制的有关概念。至于Android范例程序代码,在此节录文章里,就省略了。

Tags:Android IBinder 接口

编辑录入:coldstar [复制链接] [打 印]
赞助商链接