应用程序A定义了自定义权限:
com.package.permission.READ_APP_DATA
当安装应用程序B并声明自定义权限时,它将被授予。
然而,如果应用程序A在应用程序B之后安装,则不会向应用程序B授予权限。
虽然这可能不是常见情况,因为应用程序B通常是应用程序A的插件,但对于我的应用程序来说确实会发生。
由于超级用户应用程序同意引入全局自定义权限android.permission.ACCESS_SUPERUSER
,如果用户决定切换超级用户应用程序,则可能会出现大问题。
为了处理此问题,我打算在我即将开始声明的自定义权限中使用以下代码:
checkPermissions(this, getCallingActivity().getPackageName()); // get the package name from the sender first
private boolean checkPermissions(Context context, String callingPackage) {
final List<PackageInfo> apps = context.getPackageManager().getInstalledPackages(PackageManager.GET_PERMISSIONS);
for (PackageInfo pi : apps) {
if (pi.packageName.equals(callingPackage)) {
String[] permissions = pi.requestedPermissions;
if (permissions != null) {
for (String permission : permissions) {
if (permission.equals("com.package.permission.READ_APP_DATA")) {
return true;
}
}
}
}
}
return false;
根据这个问题的标题:这种方法“安全”吗?或者说,在应用程序被安装后,是否存在一种方式/根黑客可以修改其清单并将权限以编程方式“添加”到应用程序B中?
<permission>
元素,特别是如果这是一个signature
级别的权限。 - CommonsWare<permission>
元素,而应用程序B只有<uses-permission>
元素。我建议在应用程序B中也添加<permission>
元素,这样安装顺序就不再重要了。 - CommonsWarerequestedPermissions
包括未授予的权限。鉴于此,我没有看到任何漏洞,但我认为我有与你发布这个问题时相同的忧虑。:-) 如果没别的,确保你将其测试回到你的minSdkVersion
,因为这感觉像是Android的行为可能在多年后发生了变化的那种领域。 - CommonsWare