关于AIDL调用的安全机制(存在2个AIDL的被调用方)

之前做AIDL的时候,只考虑了AIDL的1对1的调用。今天考虑到项目安全性,跟大家讨论后发现了如下问题。

为了与之前的博文http://blog.csdn.net/singleton1900/article/details/8434643描述风格表述一致,现在还是以AIDL服务端(被调用端),以及AIDL客户端(调用端)来表述。

这个问题就是:AIDL客户端唯一,AIDL服务端存在2个,且都实现了AIDL接口,接口的入口地址(BIND_ACTION)也一样。

现在,客户端会调用哪个服务端?

回答这个问题最直观的方法就是测试。

经过测试,AIDL客户端始终会调用先安装的AIDL服务端apk。将先安装的AIDL服务端apk卸载后,才会调用后安装的AIDL服务端apk。

因此,使用AIDL作为项目之间的接口可能存在一定的风险。

如何规避这个风险,网上有文章说,在IBinder里面的onTransact函数中调用Binder.getCallingUid()和Binder.getCallingPid()来判断外来方的身份。

但这个方法,只能是被调用方检测调用方的身份。

如果一个第三方应用(调用方)通过AIDL使用支付应用(被调用方)完成购买操作,现在有不法分子获得了双方AIDL接口以及绑定的入口,他就可以伪造一个假的支付应用(将之前的支付应用干掉),从而获取用户的银行密码等重要信息。而上面的那个方法,则无法对这个事例做出相应的安全处理。因为被调用方都不存在了,还怎么检测;况且,检测到的,也还是正常的第三方应用的身份。

有一种解决方案,就是在调用方调用被调用方的时候,检测被调用方的Uid和Pid,如果Uid或Pid异常,就判定是非法被调用方,终止调用。

但这个方法具体怎么实现,现在还不知道。

等了解了,我会更新下这篇博文。

当然如果有大神了解,还请不吝赐教~

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值