Seguridad de enviar extras de intenciones sensibles dentro de mi propia aplicación?

Tengo una actividad que solicita un nombre de usuario y una contraseña y, a continuación, inicia otra actividad en mi aplicación para completar una suscripción de usuario. Quiero enviar el nombre de usuario y la contraseña como extras de la segunda actividad. Algo como:

Intent intent = new Intent(activity, SecondActivity.class); intent.putExtra("u", username); intent.putExtra("p", password); startActivity(intent); 

Y mi manifiesto define SecondActivity como:

 <activity android:name="com.me.SecondActivity" android:label=""> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.me.FirstActivity" /> </activity> 

Y ahora estoy teniendo dudas sobre la seguridad de enviar el nombre de usuario y la contraseña como extras de la intención como este – ¿es posible que otra aplicación para interceptar la invocación de SecondActivity con un filtro de intención falsa? Además de eso, me pregunto qué sucede con los extras de la intención, ¿se han persistido en el disco por el sistema operativo? Alguien podría mirarlos allí si es así.

Gracias

La clave aquí es la distinción entre Intentes Implícitos y Intérpretes Explícitos . Su ejemplo utiliza una intención explícita ya que está especificando la clase exacta que desea ejecutar. Esto está bien, porque los intentos explícitos no pueden ser interceptados y permanecerán dentro de su aplicación.

Intentos implícitos, sin embargo, abrir varios posibles vectores de ataque. Este artículo habla sobre ello en más detalle. Yo recomendaría mucho contra el uso de Implicit Intents para pasar cualquier tipo de información sensible.

Desde los documentos de Android :

Los intentos explícitos han especificado un componente (a través de setComponent (ComponentName) o setClass (Context, Class)), que proporciona la clase exacta que se va a ejecutar.

Intenciones implícitas no han especificado un componente; En su lugar, deben incluir suficiente información para que el sistema determine cuál de los componentes disponibles es mejor ejecutar para esa intención.

Como dije, para su ejemplo en la pregunta, pasar la contraseña a través de Intent es relativamente seguro en que ninguna otra aplicación puede interceptarlo en tiempo de ejecución. Pero es importante tener en cuenta que esto no siempre es así, y el uso de intentos implícitos podría teóricamente permitir la Interceptación de Intención y exponer la información sensible.

Editar :

En cuanto a la persistencia de los Intent Extras para el disco, sí, esto es un riesgo. Sin embargo, tenga en cuenta que si alguien tiene acceso root en el dispositivo y lo está utilizando para intentar buscar en el disco esta información de intenciones persistentes, puede que haya formas más fáciles de obtener la misma información. No importa lo que hagas, alguien con acceso root al dispositivo físico probablemente será capaz de obtener esa contraseña a menos que hagas un cifrado muy excelente.

Mi recomendación sobre una perspectiva de seguridad general es tratar de no tratar las contraseñas directamente en cualquier tipo de contexto a largo plazo o persistente. Las contraseñas sólo deben utilizarse durante un proceso de inicio de sesión y descartarse inmediatamente después (suponiendo que se esté autenticando con un servidor). Por lo tanto, con el uso normal de la aplicación (un usuario legítimo con una contraseña real), no tiene que preocuparse de que un agente malintencionado inspeccione la memoria del dispositivo, ya que cuando el agente malicioso recibe el dispositivo, el La contraseña ha sido removida de la memoria.

Es posible que las aplicaciones de terceros intercepten las intenciones de todo el sistema. Sugiero que encripte sus datos antes de enviarlos a la siguiente intención y, a continuación, descifrarlo una vez que se haya recibido.

Manejar contraseñas siempre debe ser un asunto de muy corto plazo. Se recomienda utilizarlos sólo para la solicitud de autenticación y luego descartarlos. En cuanto a los detalles de su pregunta, es decir, el envío de contraseña entre las actividades a través de una intención explícita, esto es seguro en la medida en que ninguna otra aplicación será capaz de interceptar y ver el valor. Sin embargo, el valor de contraseñas debe mantenerse en algún lugar (memoria o disco) para pasarlo a su actividad secundaria. Si se mantiene en el disco es bastante fácil de recuperar. Si se mantiene en la memoria, un atacante que obtiene acceso a su dispositivo puede root y luego realizar volcado de memoria para ver los valores en la memoria. Por lo tanto, no se recomienda tratar con contraseñas de esta manera.

  • Cómo habilitar la opción AutoStart para mi aplicación en Xiaomi phone Security App programmatically en android
  • ¿Existe una manera de almacenar de forma segura los datos de usuario en un dispositivo Android?
  • El juego de Android sigue siendo hackeado
  • Cómo proteger correctamente una aplicación que utiliza compras en la aplicación y DB local
  • ¿Es el intercambio de archivos Bluetooth completamente seguro?
  • Características de seguridad en Android
  • Permitir que sólo mis aplicaciones Android ejecuten api de punto final en java
  • ¿Dónde almacenar datos de aplicaciones grandes en dispositivos android?
  • Detectar intentos de captura de pantalla en Android 4.0+
  • ¿Cuánto esfuerzo debo poner en mi seguridad para Android en la facturación de aplicaciones?
  • Bluetooth seguro vs. inseguro
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.