如何在不同应用程序之间发送Intent数据时保护其安全性

12

我正在处理我的安卓应用程序的安全方面。

我想了解在将Intent数据和extras从一个应用程序发送到另一个应用程序时,保护它不被其他应用程序窥视的方法。

其中一种蛮力方法是使用安卓的加密-解密来编码意图数据,是否有更好的方法来实现相同的效果?

提前致谢。

3个回答

5
如其他答案所指出的那样,虽然您可以向一个完全限定的Activity发送意图,但没有什么能阻止其他人创建一个具有相同包名的应用程序。
您可能希望为此方案添加额外的安全步骤:
1.首先向远程Activity发送“Challenge”意图(例如,它应该使用共享密钥加密您提供的随机字符串并将其发送回您)。
2.如果第一步安全,则可以自由地使用其完全限定的Activity向此远程应用程序发送未加密的消息。
这是一种相当糟糕的安全措施,但也许对您的需求足够了。
请查看下面的CommonsWare的评论。
更安全的方法可能是将您的Activity编码为一个“绑定”服务,保留Challenge步骤,但通过更私密的通信方式。

3
“没有任何阻止某人使用相同的包创建一个应用程序”--请注意,两个具有相同包名的应用程序不能同时安装在同一设备上。 话虽如此,你提出的观点非常正确,因为通信渠道的任何一方都可能被替换欺骗。更不用说,所有“Intent” extras对于使用“startActivity()”的所有应用程序的“Intents”都是可见的(http://commonsware.com/blog/2011/06/30/warning-activity-intent-extras-public.html)。 - CommonsWare
哇,我不知道这个,感谢提供链接。也许你可以通过使用正确的标志防止你的活动出现在recentTasks列表中来解决这个问题?(或者使用一个_bound_服务代替) - Laurent'
据我所知,使用AIDL无法拦截通过绑定服务传输的数据。仍然需要想出某种机制来防止一方被另一个欺骗通信的应用程序替换。 - CommonsWare

0

我的猜测是,如果您使用显式意图,即指定要发送意图的类,则没有其他类可以拦截该意图并查看其数据。
然而,如果您尝试将信息发送到的应用程序中的类名更改,则此方法可能会失败。


0
如果意图指定目标,该目标是发件人应用程序包的一部分,则其他应用程序将无法捕获它 - 它将传递给预期接收者。
另一方面,如果您将意图发送到另一个应用程序,则不能保证意图的接收者具有您期望的实现:如果您将意图发送到com.mycompany.security.SecureReceiver,但是除了您的应用程序之外,安装了具有给定类描述的其他应用程序,则您将意图发送到该应用程序。
此外,Android是一个开放系统。如果有人编译自己的应用程序框架,那么他可以操纵Intent交付系统。
您是想保护数据不受用户或恶意应用程序的攻击吗?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接