Attualmente sto implementando i pagamenti in-app Android e mi sto chiedendo quali sono i vettori di attacco che dovrei cercare.
Ho una semplice applicazione per visualizzare il contenuto generato dal server. Voglio consentire all'utente di acquistare ulteriori access in-app e vorrei sapere come comunicare una transazione riuscita al server.
Un breve riepilogo del funzionamento dei pagamenti in-app Android:
- L'app invia l'utente ad Android Market con il prodotto da acquistare
- L'app viene informata dal Market al termine della transazione.
- L'app richiede le informazioni sulla transazione utilizzando un nonce.
- Google invia una risposta all'app con il record della transazione, ripetendo il nonce, firmata con una chiave privata specifica per sviluppatore.
- L'app può controllare i dati utilizzando il nonce e la firma (+ chiave pubblica).
- [aggiornamento]: le transazioni Android includono sempre un timestamp e la mia app aggiunge un GUID per identificare il client. (entrambi sono nel record della transazione firmato)
Maggiori informazioni qui: link
Il mio piano attuale è di inviare il record completo della transazione al server e verificare la chiave pubblica sul server.
Alcune domande che ho:
- Il mio piano è intrinsecamente imperfetto?
- È preferibile generare e controllare anche il lato nonce server? Perché questo nonce viene comunque utilizzato?
- È necessario (preferibile) utilizzare HTTPS quando si comunica con il server?
Non sto proteggendo i dati privati o top-secret, ma non voglio renderlo facile per un utente malintenzionato.