活动开始,即使它有标签android:protectionLevel =“signature”

时间:2012-03-22 10:14:22

标签: android security android-intent certificate signing

我有2个申请“A”和“B”

应用程序“A”用证书C_A签名,“B”用C_B签名

在“A”中

    <activity android:name=".ActivityA" android:protectionLevel="signature" android:label="@string/app_name">
        <intent-filter>
            <action android:name="com.temp.packagea" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity> 

在应用“B”中

        Intent i = new Intent();
        i.setAction("com.temp.package");
        startActivity(i);

问题是应用程序A在应用程序B没有问题的情况下启动。

如何保护我的应用中的启动活动免受使用与我相同签名签名的应用程序的保护。

2 个答案:

答案 0 :(得分:3)

protectionLevel不是清单中活动代码的有效属性。 protectionLevel标记适用于<permission>元素,并在您的应用程序指定新权限(不是默认的Android系统权限之一)时使用。

如果您的应用程序未使用与包含应用程序相同的证书进行签名,则您似乎试图阻止应用程序调用{​​{1}}(在您的示例中为A)。您要在此处执行的操作是使用Activity元素在清单(包含A的应用程序)中声明新权限,并将新权限的<permission>设置为protectionLevel。然后,在Signature的清单声明中,使用Activity属性,以便启动android:permission时需要此新权限。对于您希望能够调用Activity的任何其他应用程序,您只需在该其他应用程序的清单中添加Activity元素,并指定您创建的新权限。由于该权限是uses-permission权限,因此系统将在安装新应用程序时自动授予该权限。

答案 1 :(得分:0)

android:protectionLevel上的错误用法应该将它放在权限节点中。