我正在使用意图在新任务中启动新活动。此意图在其额外内容中包含该活动所需的一些私有数据。此数据不应被其他应用程序读取。我们已经调查了这些数据是否真的没有泄露。我们发现,通过从getRecentTasks()使用RecentTaskInfo,任何具有GET_TASK权限的应用程序都可以读取这些额外的数据。这不是很安全。一旦我们发现这个漏洞我们就停止搜索了。有没有更多的方式来泄露这些数据?而且,我如何确保额外的数据不被其他应用程序读取?
发布于 2013-03-19 22:14:35
从安卓4.1.1开始,添加了一个额外的权限,以保护使用RecentTaskInfo的第三方应用程序读取额外的内容。该权限(android.Manifest.permission.GET_DETAILED_TASKS)只能由系统获取。如果没有此权限,额外的将在通过RecentTaskInfo返回baseIntent之前被换出。
来自commit http://androidxref.com/4.2.2_r1/history/frameworks/base/services/java/com/android/server/am/ActivityManagerService.java#8238e717df4bc5eebf15f97172d68af3599a95bb的注释
添加新的签名级权限,获取任务详情。
第三方应用程序现在无法访问与任务相关的意图的额外内容,以防止其中的私人数据泄露。
更改Id: I95af9e181ac42557bc8b981807e7ddd266a88d0e
因此,似乎正在努力使intent extra更安全地传输敏感信息。我不知道是否有其他方式,这些额外的可以泄漏,但至少额外的似乎可以从JB向上。
发布于 2013-03-19 21:55:18
此意图在其额外内容中携带该活动所需的一些私有数据
为什么?将标识符传递给额外的私有数据,其中将这些标识符解析为私有数据(例如,数据库查询)只能由活动完成。
我们发现,通过从getRecentTasks()中使用RecentTaskInfo,任何具有GET_TASK权限的应用程序都可以读取这些额外的数据
是的,我在大约两年前就blogged about this了,其他人可能在那之前就做了。
有没有更多的方式来泄露这些数据?
启动其他组件的所有请求都是通过操作系统进程进行的,因此数据总是“泄露”给操作系统。
而且,根据你对Intent做了什么,你可能会以其他方式泄露它(例如,将Intent本身作为Parcelable传递给其他应用程序)。
,我如何确保extra中的数据不会被其他应用程序读取?
你不能。同样,不要把私有数据放在额外的活动中,而是使用可以用来获取私有数据的标识符。
发布于 2013-03-19 21:57:54
您有私有的存储空间,只有您的应用程序才能读取。在非根设备上,您在那里存储的信息将只能由您的应用程序访问。
你可以使用SharedPreference来存储你的数据--数据存储在你的应用程序指定的私有存储中。
或者,您可以直接使用私有存储,并将任意文件连接到那里,如下所示:
FileOutputStream fos;
try {
fos = openFileOutput (FILENAME, Context.MODE_PRIVATE);
fos.write (string.getBytes ());
fos.close ();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} https://stackoverflow.com/questions/15501260
复制相似问题