2011-10-04 6 views
11

Sto lavorando sugli aspetti di sicurezza della mia applicazione Android.Come proteggere i dati Intent durante l'invio attraverso le applicazioni

Vorrei sapere come proteggere i dati e gli extra di Intent durante l'invio da un'applicazione all'altra in modo che nessun'altra applicazione oltre a questi due possa snooparlo.

Uno degli approcci di forza bruta sarebbe utilizzare la decodifica della crittografia di Android per codificare i dati di intenti, c'è un modo migliore per ottenere lo stesso?

Grazie in anticipo.

risposta

0

La mia ipotesi è che se si utilizza un intento esplicito, vale a dire che specifica la classe a cui l'intento è quello di essere inviato a, allora nessun altra classe può intercettare che l'intento e guardare i suoi dati.
Questo metodo tuttavia, potrebbe non riuscire se il nome della classe nell'applicazione che si sta tentando di inviare le informazioni alle modifiche.

0

Se un intento specifica il target, che fa parte del pacchetto dell'applicazione del mittente, quindi altre applicazioni non avranno la possibilità di acquisirlo, verrà consegnato al destinatario previsto.

D'altra parte, se si invia un intento a un'altra applicazione, non è garantito che il destinatario dell'intenzione sarà l'implementazione che ci si aspetta: se si invia l'intento a com.mycompany.security.SecureReceiver, ma al posto della tua applicazione, un'altra applicazione viene installata con la descrizione della classe fornita, che tu invierai il tuo intento a quella applicazione.

Anche Android è un sistema aperto. Se qualcuno compila il proprio framework applicativo, allora può manipolare il sistema di consegna Intent.

Si desidera proteggere i dati dall'utente o da applicazioni dannose?

5

Come indicato nelle altre risposte, sebbene sia possibile inviare un'intenzione a un'attività pienamente qualificata, nulla impedisce a qualcuno di creare un'applicazione con lo stesso pacchetto.

Si potrebbe desiderare di aggiungere un passo ulteriore sicurezza a questo schema:

  • Prima di inviare un intento 'sfida' all'attività remota (dovrebbe, ad esempio criptare una stringa casuale che hai fornito utilizzando un condiviso passphrase e inviare di nuovo a voi)

  • Se questo primo passo la sicurezza è ok, si può inviare liberamente messaggi cifrati a questa applicazione remoto utilizzando la sua attività completo.

Questa è una sicurezza piuttosto scadente, forse è sufficiente per le vostre esigenze.


Si prega di dare un'occhiata al commento CommonsWare qui sotto.

Un altro modo sicuro potrebbe essere quello di codificare la propria attività come Bound Servizio, mantenendo il passaggio della Sfida, ma all'interno di un mezzo di comunicazione più privato.

+3

"nulla impedisce a qualcuno di creare un'applicazione con lo stesso pacchetto" - si noti che non è possibile installare due applicazioni sullo stesso dispositivo contemporaneamente con lo stesso pacchetto.Detto questo, il tuo punto è molto valido, in quanto entrambi i lati del canale di comunicazione potrebbero essere falsificati da una sostituzione. Per non parlare del fatto che tutti gli extra di 'Intent' sono visibili a tutte le applicazioni di' Intents' usati con 'startActivity()' (http://commonsware.com/blog/2011/06/30/warning-activity-intent-extras- public.html). – CommonsWare

+0

Wow non lo sapevo, grazie per il link. Forse puoi risolvere il problema impedendo alla tua attività di apparire nell'elenco RecentTasks usando i flag giusti? (o utilizzando invece un servizio _bound_) –

+0

AFAIK, non è possibile intercettare i dati trasferiti tramite un servizio associato utilizzando AIDL. C'è ancora il problema di inventare una sorta di meccanismo per impedire che una parte venga sostituita da un'altra app che falsifica le comunicazioni. – CommonsWare

Problemi correlati