Ограничение приемника Android Broadcast из определенного приложения - PullRequest
6 голосов
/ 02 марта 2012

У меня есть 2 приложения.
Если я использую службу, я могу установить разрешение, поэтому только app1 может отправить намерение на app2:
Определить разрешение в app2 (protection level: signature) и использоватьэто разрешение в app1.
Службе в app2 защищено этим разрешением.
Таким образом, только app1 может отправить намерение службе в app2, и никакое другое приложение (если толькомоя подпись просочилась) может отправить намерение на обслуживание на app2.

Могу ли я сделать то же самое с Broadcast Receiver?

  • app1: sendBroadcast (намерение, разрешение)
  • app2: определить разрешение, использовать это разрешение.

Насколько я понимаю, использовать sendBroadcast (намерение,разрешение), приложению не нужно «использовать» разрешение.Это означает, что ЛЮБОЕ приложение может отправить намерение на app2.Эти параметры разрешений проверяются только на соответствие app2, чтобы другие приложения не получали это намерение.(Если я удаляю app2 и устанавливаю поддельный app2 с той же самой определенной строкой разрешения, поддельный app2 может получить намерение от app1, что является неожиданным)

Кстати, если приложение определяет разрешениеи использовать его сам по себе, уровень защиты (подпись), кажется, не имеет смысла.Это правда?

Теперь я могу установить дополнительное разрешение:

  • app1: определить разрешение, использовать это разрешение.
  • app2: приемник ограничен только для этого разрешения.

Опять же, если удалить app1, установить поддельное app1 с тем же разрешением, то поддельное app1 может отправить ложное намерение на app2.Что я могу сделать, чтобы предотвратить получение app2 поддельных намерений?

Спасибо

1 Ответ

5 голосов
/ 02 марта 2012

Тег также может определять, какое разрешение должны иметь вещатели, см. http://developer.android.com/guide/topics/manifest/receiver-element.html#prmsn

Я имею в виду, что вы можете защитить свой приемник от несанкционированного вещания, кодировав так:

...
<permission android:name="com.yourapp.PERMISSION"
    android:protectionLevel="signature"
        android:label="@string/permission_label"
        android:description="@string/permission_desc">
</permission>
...

<receiver android:name=".MyReceiver"
    android:permission="com.yourapp.PERMISSION">
    <intent-filter>
        <action android:name="com.yourapp.ACTION" />
    </intent-filter>
</receiver>
...
...