2012-03-02 9 views
6

Mam 2 aplikacje.
Gdybym skorzystać z usługi, mogę ustawić uprawnienia tak tylko app1 może wysłać zamiar app2:
Zdefiniuj uprawnienia w app2 (protection level: signature) i korzystać z tego uprawnienia w app1.
Usługa w app2 jest chroniona tym prawem.
W ten sposób tylko app1 może wysłać zamiar usługi na app2, i żadna inna aplikacja (chyba mój podpis jest wyciekły) może wysłać zamiar usługi na app2.Ograniczanie odbiornika nadawczego systemu Android z konkretnej aplikacji

Czy mogę zrobić to samo z odbiornikiem Broadcast?

  • app1: sendBroadcast (intent, pozwolenie)
  • app2: zdefiniować uprawnienia, należy to zgodę.

Zgodnie z moim rozumieniem korzystania z sendBroadcast (zamiar, zezwolenie), aplikacja nie musi "używać" pozwolenia. Znaczenie DOWOLNEJ aplikacji można wysłać zamiar do app2. Te parametry uprawnień zostały sprawdzone tylko pod kątem app2, aby uniknąć innych aplikacji, które mogłyby otrzymać takie zamiary. (Jeśli usunąć app2 i zainstalować fałszywe app2 z tego samego łańcucha zgody zdefiniowany, fałszywy app2 można dostać intencyjny app1, który jest nieoczekiwany)

BTW Jeśli aplikacja definiować uprawnienia i używać go w sobie, ProtectionLevel (podpis) wydaje się nie mieć znaczenia. Czy to prawda?

Teraz mogę ustawić dodatkowe uprawnienia:

  • app1: Zdefiniuj uprawnienia, należy to zgodę.
  • app2: Odbiorca jest ograniczony tylko do tego uprawnienia.

Ponownie, jeśli ktoś usuwa app1, instaluje fałszywe app1 z tego samego zgody, to fałszywy app1 mogą wysyłać fałszywe zamiar app2. Co mogę zrobić, aby zapobiec otrzymywaniu fałszywych intencji przez użytkownika app2?

Dzięki

+0

tag może również określać, jakie uprawnienia powinien mieć nadawca, patrz http://developer.android.com/guide/topics/manifest/receiver-element.html#prmsn –

Odpowiedz

5

Znacznik może również zdefiniować co zgodą nadawcy powinni mieć patrz http://developer.android.com/guide/topics/manifest/receiver-element.html#prmsn

oznacza, że ​​można chronić odbiornik z nieautoryzowanych programów przez kodowanie tak:

... 
<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> 
... 
Powiązane problemy