Actualmente estoy implementando pagos de Android en la aplicación, y me pregunto qué vectores de ataque debería tener en cuenta.
Tengo una aplicación simple para ver el contenido generado por el servidor. Quiero permitir que el usuario adquiera acceso adicional en la aplicación y me gustaría saber cómo comunicar una transacción exitosa al servidor.
Un resumen rápido de cómo funcionan los pagos dentro de la aplicación de Android:
- La aplicación envía al usuario a Android Market con el producto para comprar
- Market notifica a la aplicación cuando finaliza la transacción.
- La aplicación solicita información de transacción mediante un nonce.
- Google envía una respuesta a la aplicación con el registro de la transacción, repitiendo el nonce, firmado con una clave privada específica del desarrollador.
- La aplicación puede verificar los datos usando el nonce y la firma (+ clave pública).
- [actualización]: las transacciones de Android siempre incluyen una marca de tiempo, y mi aplicación agrega un GUID para identificar al cliente. (ambos están en el registro de la transacción firmada)
Más información aquí: enlace
Mi plan actual es enviar el registro completo de la transacción al servidor y verificar la clave pública en el servidor.
Algunas preguntas que tengo:
- ¿Mi plan tiene fallas inherentes?
- ¿Es preferible generar y verificar también el lado del servidor nonce? ¿Por qué se usa ese nonce de todos modos?
- ¿Es necesario (preferible) usar HTTPS cuando se comunica con el servidor?
No estoy protegiendo datos privados o de alto secreto, pero no quiero que sea fácil para un atacante.