【发布时间】:2012-07-12 18:39:18
【问题描述】:
我的应用程序使用 android:protectionLevel="signature" 定义了一个权限。
<permission android:name="my.app.permission.EXAMPLE" android:protectionLevel="signature" />
我的目的是制作只能由我签名的应用程序启动的应用程序模块。这些应用程序模块在其活动中具有 android:permission。 这工作正常。但... 第三方应用可以使用相同的权限名称,并将保护级别更改为正常,像这样
<permission android:name="my.app.permission.EXAMPLE" android:protectionLevel="normal" />
如果我的应用程序先安装,我可以防止其他应用程序覆盖权限。但是,如果有人卸载我的应用程序然后安装他的应用程序,它会重新定义权限。
是否可以防止其他应用程序使用相同的权限名称,例如,给权限一个唯一的ID,如应用程序包?
虽然 Manifest 是加密的,但任何人在尝试启动需要此权限的活动时都可以读取 log cat 中的权限名称(抛出具有所需权限名称的异常)。
【问题讨论】:
-
好问题,我猜你无法限制其他应用程序这样做。
-
这是一个安全问题。我不能允许我的签名应用程序模块将仅启动我签名的核心应用程序,因为未签名的应用程序可以替换我定义低级别保护的权限,然后使用我的签名模块。
-
您可以通过创建具有不同包名称、签名和 protectionLevel=normal 的应用的修改版本来设置测试。看看当两个应用程序在同一台设备上时会发生什么。我的猜测是,a) 签名检查将首先启动,并确保流氓应用程序无法访问需要正确签名的应用程序。 b) 具有不同保护级别的相同权限字符串可以在同一设备上共存。
-
@Dennix 您必须添加另一层安全性的一个选项是将某种加密的 Extra 添加到您用于启动模块活动的意图中。并以这样的方式对它们进行编程,如果这个额外的不存在并且适合简单地关闭而不做任何事情。这样,如果您的模块活动是从其他来源启动的,他们将不会有这个额外的,并且模块似乎什么都不做。
标签: android permissions