6

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

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

另一种选择是添加权限要求,但这可能会被更多用户忽略。虽然那将是用户的错(如果我不添加权限那将是我的错),但最近应用程序因暴露用户内容而受到了很多抨击。

第三个选项是每次某些应用访问我的时提示用户。但是我没有包名,所以我不知道意图来自哪里。此外,我的应用程序会自动执行来自云端的某些传输,因此用户可能会“设置并忘记”意图。

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

编辑:我是个菜鸟,所以我用词太松散了。试图使问题变得更好。

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

4

3 回答 3

2

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

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

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

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

我的首选选项是我可以通过使用包名称过滤意图来启用来自某些“受信任的提供者”的意图。但是我找不到如何做到这一点。

这是不支持的。

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

如果用户“忽略”了一项许可要求,他们就没有理由抱怨“隐私问题”。

但是我没有包名,所以我不知道意图来自哪里。

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

当涉及到意图时,我有哪些安全选择

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

或者这是 IPC 的错误方法?

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

于 2012-09-23T23:40:27.333 回答
2

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

于 2012-09-23T21:31:22.493 回答
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>在其清单中具有适当条目并由相同密钥签名的应用。

于 2016-03-21T18:40:14.917 回答