Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android应用程序之间的数据传输安全吗?_Android_Android Intent_Android Activity - Fatal编程技术网

Android应用程序之间的数据传输安全吗?

Android应用程序之间的数据传输安全吗?,android,android-intent,android-activity,Android,Android Intent,Android Activity,我可以毫无问题地调用其他应用程序的活动,包括向它们发送一些数据和接收一些数据。但我正在发送和接收一些敏感信息,如果这些信息落入坏人之手,可能会被滥用。我的问题是,在应用程序之间传输数据安全吗 例如,我将这样的活动称为: Intent intent = new Intent("com.my.package.MY_REQUEST_ACTION"); intent.setClassName("com.other.package", "com.other.

我可以毫无问题地调用其他应用程序的活动,包括向它们发送一些数据和接收一些数据。但我正在发送和接收一些敏感信息,如果这些信息落入坏人之手,可能会被滥用。我的问题是,在应用程序之间传输数据安全吗

例如,我将这样的活动称为:

            Intent intent = new Intent("com.my.package.MY_REQUEST_ACTION");
            intent.setClassName("com.other.package", "com.other.package.UserActionActivity");
            signerIntent.putExtra("INTENT_PASSWORD", "1234");
            signerIntent.putExtra("INTENT_COMMAND", "COMMAND_DO_SOMETHING");
            signerIntent.setType("text/plain");
            startActivityForResult(intent, 0);
并在UserActionActivity中返回一些内容:

                Intent result = new Intent("com.other.package.INTENT_RESULT_DESCRIPTION");
                result.putExtra("INTENT_RETURN_RESULT", "...");
                result.putExtra("INTENT_RETURN_RESULT2", "...");
                setResult(Activity.RESULT_OK, result);
                finish();
等等。但是这些额外的字符串有多安全呢?我是否需要担心它们被其他应用程序(除了两个相关应用程序)访问,或者是故意访问,或者是通过某种“黑客”访问?我需要公钥加密之类的东西吗

根系统上的情况是否有所不同(即,具有根权限的应用程序可以不费吹灰之力地读取应用程序间的通信)

我是否需要担心它们被其他应用程序(除了两个相关应用程序)访问,或者是故意访问,或者是通过某种“黑客”访问

现在让我们假设两个应用都没有被攻击者修改。 如果是这样,那么原则上,您建立的通信应该是非根设备上的私有通信。实际上,在activity
Intent
extras中出现了一些bug,尽管我最近没有听说过。在IPC选项中,从安全角度来看,活动可能是最糟糕的选择,因为它们具有其他影响(例如,出现在概览/最近的任务屏幕中),增加了存在我们忽略的某些错误的可能性

但是,在您的代码中,双方都假定另一个应用程序未被修改。特别是:

  • 除非您有一些未显示的安全性,否则设备上的任何应用程序都可以运行第一个代码段中的代码,并尝试欺骗应用程序在第二个代码段中返回响应

  • 第一个代码段中的代码假定
    com.other.package
    未被攻击者修改

有一些方法可以帮助抵御这种情况(例如,自定义
签名
权限,在运行时检查签名)

另外,请记住,攻击者可以毫不费力地找到
“1234”

关于建议加密的评论,考虑到您描述的协议,加密似乎是一个不太可能的解决方案。如果您必须在IPC协议中提供一个秘密(
INTENT\u PASSWORD
),那么就没有两个应用程序都必须用于加密目的的共享秘密,我也不太确定您将使用什么公钥基础结构来提供公钥加密

根系统上的情况是否有所不同(即,具有根权限的应用程序可以不费吹灰之力地读取应用程序间的通信)


当然。在根设备上,所有赌注均已取消。不过,这并不是专门与IPC联系在一起的。

简短回答:它不安全,但需要攻击者付出一些努力

长答覆: 转移可以被中间人攻击拦截:

在无底座手机上:

如果将数据发送到
intent.setClassName(“com.other.package”、“com.other.package.UserActionActivity”)
somone可以卸载原始的“com.other.package”,并使用接收未加密数据的相同活动安装自己的“com.other.package”

例如,攻击者可以反汇编原始软件,添加代码(处理机密数据),并将代码重新组装到新的apk(使用不同的证书)


在根设备上:我不知道,但我假设“公开框架”可能能够拦截并重新定义android操作系统调用。

如果数据是安全的,则对其进行加密。根系统上没有未加密的东西是安全的。即使在非根系统上,我也不希望数据是安全的。你肯定要加密这些数据。你需要为所有交换加密所有敏感数据,即使是在活动之间或API。我不认为我需要担心这种特殊的攻击,我假设这里的用户是“好”的一方,当然他可能会被骗去做这件事。但是在重新安装的情况下,系统只会重置通信,不是吗?我也不知道如何进行加密,因此这个问题(可能是另一个问题的主题)。关于根系统,我不会那么悲观,如果攻击者接管了系统,那将是很糟糕的,但是当用户是理性的并且只安装他可以信任的东西时,我正在寻找一些东西。现在我想起来了,我想它和正常系统没有什么不同。顺便说一句,密码只是一个例子。关于IPC选项,我认为这是唯一一个将数据传递给活动(并启动它)的密码,还是我有另一个密码?@comodoro:启动活动不需要通过附加程序传递数据。还有其他IPC选项(发送广播、启动服务、绑定到服务、与
内容提供商交谈等)。使用附加功能很方便,但不是必需的。