如何限制Android Intents或添加安全性

时间:2012-09-23 19:12:57

标签: android security android-intent

我在应用程序中为活动添加了一个intent过滤器,以便其他应用程序可以通过我的应用程序访问某些数据(来自云端)。但是,某些用户可能存在隐私问题,并且可能对其使用的数据不太满意。但是,其他应用程序可以插入我的应用程序,将其设置等备份到云端。

现在,我需要某种安全机制来限制哪些应用可以访问我的应用程序,以便我可以禁止恶意应用程序等。虽然无法识别恶意应用程序,但我希望通过仅允许某些应用程序进行某种访问控制'可信'的包名。但是我找不到怎么做。

另一种选择是添加权限要求,但更多用户可能会忽略这一点。虽然这将是用户的错误(如果我不添加权限将是我的错),最近的应用程序已经采取了很多暴露用户内容的准备。

第三个选项是每次有些应用访问我的用户时都会提示用户。但是我没有packagename,所以我无法分辨出意图的来源。此外,我的应用程序自动从云中进行某些传输,因此用户可以“设置并忘记”意图。

我依靠意图在两个不同的应用程序之间传输一些命令。我看到我必须自己实施保护措施,但如果Google已经有一些流程,我不想重新发明轮子。如果没有,我将不得不实现自己的身份验证流程或类似的东西。

编辑:我是菜鸟,所以我过于松散地使用术语。试图让问题更好。

关于该应用程序的更多信息。它可以自动从/向云服务下载/上传。通过发送意图,另一个应用程序可以指定要下载或上载的文件。我不希望在没有用户知道的情况下发生这种情况,所以当意图进入时我会提示他并接受数据。而且,应用程序可以设置定期转移。虽然用户现在已经被提示两次(一次是在权限上,一次是在意图进入时),他没有权利投诉。但这是可接受的做法,还是我需要以某种方式更好地保护它。

3 个答案:

答案 0 :(得分:2)

我认为您应该查看函数Binder.getCallingUid以获取调用进程的UID(然后是其packageName)或Binder.getCallingPid来获取调用进程的PID以及此pid {{3} }调用进程的packageName。注意,几个包可以使用相同的UID(如果它们仅使用相同的证书签名),并且几个包可以共享一个进程(但它们也应该具有相同的UID)。

答案 1 :(得分:2)

  

我在我的应用中添加了一个意图过滤器

不,你没有。您已将<intent-filter>添加到<activity><service><provider>,但未添加<application>

  

现在,我需要某种安全机制来限制哪些应用可以访问我的应用程序,以便我可以禁止恶意应用程序等。

准确地说,您打算如何识别“恶意应用”?

  

我首选的选项是我可以通过使用包名过滤意图来启用某些“可信提供商”的意图。但是我找不到怎么做。

不支持。

  

另一个选择是添加权限要求,但更多用户可能会忽略这一点。

如果用户“忽略”了许可要求,他们就没有理由对“隐私问题”进行投诉。

  

但是我没有包名,所以我无法分辨意图的来源。

在某些情况下,Yury的建议会奏效。

  

关于意图

,我的安全选择是什么?

Android中没有这样的概念。 Intent没有“安全性”,只有整数具有“安全性”。活动,服务和广播接收器代表您的代码,您的代码可以实施安全措施来保护所述代码。

  

或者这是IPC的错误方法吗?

由于你没有说明你正在为IPC做什么(显然它涉及Intent个对象除外),因此无法回答这个问题。

答案 2 :(得分:0)

如果允许向您的应用发送意图的唯一应用也是您控制的应用,则可以为您的应用创建<permission>,并将其安全级别设置为“签名”。这将限制对使用相同签名密钥签名的应用程序的访问。

<manifest ...>
    ...
    <permission name="com.thedesolatesoul.myapp.MY_ACCESS"
        android:permissionLevel="signature"
        android:label="@string/my_access_label"
        android:description="@string/my_access_description"
        />
</manifest>

然后,可以向您的应用发送意图的唯一应用是在其清单中具有相应<uses-permission>条目并且由相同密钥签名的应用。