2013-12-10 8 views
9

Partner sviluppatori!Servizio adattatore di sincronizzazione esportato ma non protetto

Ho un adattatore di sincronizzazione nella mia app e un servizio di sincronizzazione corrispondente. Ho dichiarato tutto, compreso il servizio di sincronizzazione, in base allo Google example code. L'immagine più simile a questa:

<service 
    android:name="com.myapp.SyncService" 
    android:exported="true" 
    android:process=":sync"> 

    <intent-filter> 
     <action 
      android:name="android.content.SyncAdapter"/> 
    </intent-filter> 

    <meta-data 
     android:name="android.content.SyncAdapter" 
     android:resource="@xml/syncadapter" /> 

</service> 

Mentre ha senso per impostare l'attributo android:exported per true sul servizio (consentendo al sistema Android per raggiungerlo), io sono un po 'perplesso su come legarlo giù in termini di diritti di accesso. Non voglio che nessun altro, tranne la mia app e il sistema Android, abbiano accesso al servizio.

Forse un po 'ingenuamente ho creato il mio permesso per questo:

<permission 
    android:name="com.myapp.permission.SYNC_ADAPTER" 
    android:protectionLevel="signatureOrSystem" /> 

Ma leggendo un po' sul protectionLevel mi domando ancora di più. Google says:

Si prega di evitare l'uso di questa opzione [...] il permesso "signatureOrSystem" viene utilizzato per alcune situazioni particolari in cui più fornitori hanno applicazioni integrate in un'immagine del sistema e la necessità di condividere le caratteristiche specifiche in modo esplicito perché sono in fase di costruzione insieme.

Lo scenario descritto è lontano dal mio caso d'uso. Resta quindi la seguente domanda:

Come proteggere il servizio di sincronizzazione in modo che il sistema Android, ma nessuna app di terze parti, possa accedervi?

Qualsiasi chiarimento sarebbe molto apprezzato!

+2

Hai provato a utilizzare solo un "signature" protectionLevel? Sospetto che il sistema possa ancora accedere al tuo adattatore di sincronizzazione. –

+1

Sì, ho. Ed esattamente come dici tu, il sistema Android * sembra * avere accesso. Ma questo è un comportamento documentato? Sono fortunato sul mio dispositivo? Tutti gli utenti della mia app saranno fortunati con i loro dispositivi? – dbm

risposta

0

Ho lo stesso problema. Guardando questo codice sorgente di esempio qui come guida https://android.googlesource.com/platform/packages/apps/Exchange/+/ics-mr0/AndroidManifest.xml sembra che gli adattatori di sincronizzazione abbiano chiaramente esportato = "true" senza alcuna autorizzazione.

+1

Sì, ho anche osservato che nessuno degli esempi online sembra avere una discussione elaborativa sull'aspetto di sicurezza (permessi). Quando arrivo al punto in cui metto il mio codice sul banco di prova (Jenkins) ricevo anche avvertimenti espliciti sui filamenti, in pratica mi dice che cosa so già; che ho una porta spalancata qui :-) – dbm

3

beworker ha perfettamente ragione. Ho usato il permesso di firma e il sistema è in grado di sincronizzare senza problemi.

Problemi correlati