当应用程序使用AIDL调用远程服务时,是否提供了安全性?或者它只是像一个恶意应用程序可以读取数据?
发布于 2012-09-06 14:52:46
在Android上,一个进程无法正常访问另一个进程的内存。
当您使用AIDL接口绑定到应用程序时,系统将在这些进程之间建立连接。因此,只有这两个应用程序可以读取通过AIDL接口共享的信息。
如果您想确定,则应在onBind(Intent intent)中进行额外检查,以确保正在连接的是您自己的应用程序
提示:阅读本页面的第一部分:http://developer.android.com/guide/components/aidl.html
发布于 2012-09-06 14:23:21
您可以始终在方法中进行过滤,以限制允许的包。如果包没有权限,则抛出SecurityException
Collection<String> callingpackages = getCallingPackages();
if(!callingpackages.contains("yourpackagename"){
//Throw securityException.
}和getCallingPackages
private Collection<String> getCallingPackages() {
int caller = Binder.getCallingUid();
if (caller == 0) {
return null;
}
return Lists.newArrayList(mContext.getPackageManager().getPackagesForUid(caller));
}发布于 2021-01-28 10:55:08
signature的示例安全service,通过使用android:protectionLevel="signature",只有签署了相同签名(相同密钥库)的应用程序才能绑定到您的服务
AppServer AndroidManifest.xml
<manifest ...>
<permission
android:name="my.MyCustomPermission"
android:protectionLevel="signature" />
<application
...>
<service
...
android:permission="my.MyCustomPermission">
...
</service>
</application>
</manifest>AppClient AndroidManifest.xml
<manifest ...>
<uses-permission android:name="my.MyCustomPermission"/>
<application
...
</application>
</manifest>https://stackoverflow.com/questions/12293780
复制相似问题