Android的IBinder介面及其安全性机制(转)

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

  就Service物件的开发者而言,Activity物件是属於外界(因为两者在不同的进程里执行)的软体,也大多是别人开发的。那麼,Service物件如何确定这外来的物件是善意的呢? 这就是安全性的问题了。在Service类别里,可以做权限的检查,其常用指令如下图:
[img]http://android.tgbus.com/UploadFiles_4504/200812/20081210102905449.jpg[/img]

當Service確認了對方的善意,就將IBinder介面的參考(Reference)傳給Activity物件。Activity物件就能透過IBinder介面去使用Binder的服務了。如下圖:
[img]http://android.tgbus.com/UploadFiles_4504/200812/20081210102905374.jpg[/img]
當Activity呼叫IBinder的transact()等函數時,會反向呼叫NotifyBinder子類別的onTransact()函數。此時,也可以進行安全檢驗,例如下圖裡的指令:

int uid = Binder.getCallingUID();

  就能取得對方UID來檢驗它的身分等。還可以進行checkCallingPermission()等檢驗。如下圖:
[img]http://android.tgbus.com/UploadFiles_4504/200812/20081210102905288.jpg[/img]
經檢驗而確認來客是善意的,就啟動BinderServer(如影音播放器)來提供實質的服務。

  以上是就Service的開發者角度來看Android的IBinder的安全機制的有關概念。至於Android範例程式碼,在此節錄文章裡,就省略了。

http://android.tgbus.com/Android/tutorial/200812/171437.shtml
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值