La sécurité d'envoi d'intentions sensibles dans ma propre application?

J'ai une activité qui demande un nom d'utilisateur et un mot de passe, puis commence une autre activité dans mon application pour compléter une inscription utilisateur. Je souhaite envoyer le nom d'utilisateur + mot de passe en tant qu'experts d'intention à la deuxième activité. Quelque chose comme:

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

Et mon manifeste définit SecondActivity comme:

  • Eclipse: "L'import java.io ne peut pas être résolu"
  • Android Google Maps v2, MAP_TYPE_NONE et carrés noirs
  • Comment puis-je supprimer le bouton clair dans la zone de recherche de la liste?
  • Android WebView semble ignorer les informations "viewport" sur les pages Web
  • Android Studio: Impossible de supprimer le fichier original
  • Différents arômes avec GCM
  •  <activity android:name="com.me.SecondActivity" android:label=""> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.me.FirstActivity" /> </activity> 

    Et maintenant j'ai des doutes quant à la sécurité d'envoi du nom d'utilisateur + mot de passe en tant qu'expéries comme cela: est-il possible pour une autre application d'intercepter l'invocation de SecondActivity avec un filtre intentionnel falsifié? En plus, je me demande ce qui se passe avec les extras de l'intention, est-ce qu'ils ont déjà persisté sur le disque par le système d'exploitation? Quelqu'un pourrait les regarder là-bas si oui.

    Merci

  • AppCompat ToolBar popupTheme n'est pas utilisé dans ShareAction MenuItem
  • En utilisant OKHttp, quelle est la différence entre la requête synchrone dans AsyncTask et OKhttp Asynchronous request?
  • Sélectionnez plusieurs contacts depuis l'annuaire téléphonique sur Android
  • AppCompat Dialog Theme avec une barre de titre mal colorée - Bug?
  • Combien de façons de convertir bitmap en chaîne et vice versa?
  • L'emplacement SDK n'a pas été trouvé. ANDROID_HOME - construire un projet gradle en eclipse sur un MAC
  • 3 Solutions collect form web for “La sécurité d'envoi d'intentions sensibles dans ma propre application?”

    La clé ici est la distinction entre Intents implicites et Intents explicites . Votre exemple utilise une intention explicite car vous spécifiez la classe exacte que vous souhaitez exécuter. C'est bon, car les explications explicites ne peuvent pas être interceptées et resteront dans votre application.

    Intentiments implicites cependant, ouvrez plusieurs vecteurs d'attaque possibles. Cet article en parle plus en détail. Je recommanderais fortement de ne pas utiliser d'Intuces Implicits pour transmettre tout type d'information sensible.

    À partir des documents Android :

    Les explications explicites ont spécifié un composant (via setComponent (ComponentName) ou setClass (Context, Class)), qui fournit la classe exacte à exécuter.

    Les intentions implicites n'ont pas spécifié de composant; Au lieu de cela, ils doivent inclure suffisamment d'informations pour que le système détermine quel est le meilleur des composants disponibles pour cette intention.

    Comme je l'ai indiqué, pour votre exemple dans la question, passer le mot de passe via Intent est relativement sûr car aucune autre application ne peut l'intercepter au moment de l'exécution. Mais il est important de noter que ce n'est pas toujours le cas, et l'utilisation d'intentions implicites pourrait théoriquement permettre Intent Interception et exposer les informations sensibles.

    Modifier :

    En ce qui concerne la persistance des Extrants d'Intention sur le disque, oui, c'est un risque. Gardez à l'esprit cependant que si quelqu'un a un accès root sur l'appareil et l'utilise pour tenter de rechercher le disque pour cette information d'intention persistante, il peut y avoir des moyens plus faciles d'obtenir les mêmes informations. Peu importe ce que vous faites, quelqu'un avec un accès root à l'appareil physique pourra probablement retirer ce mot de passe, sauf si vous faites un excellent chiffrage.

    Ma recommandation sur une perspective de sécurité globale consiste à essayer de ne pas traiter les mots de passe directement dans un contexte à long terme ou persistant. Les mots de passe ne doivent être utilisés que pendant une procédure de connexion et rejetés immédiatement après (en supposant que vous authentifiez avec un serveur). Par conséquent, avec l'utilisation normale de l'application (un utilisateur légitime avec un mot de passe réel), vous ne devez pas vous soucier d'un acteur malveillant qui inspecte la mémoire de l'appareil, car au moment où l'acteur malveillant saisit l'appareil, Le mot de passe a longtemps été retiré de la mémoire.

    Les applications tierces peuvent intercepter les intentions du système. Je suggère de chiffrer vos données avant de l'envoyer à l'intention suivante, puis de décrypter une fois qu'elle a été reçue.

    La gestion des mots de passe devrait toujours être une affaire à très court terme. Il est recommandé de les utiliser uniquement pour la demande d'authentification, puis de les jeter. En ce qui concerne les détails de votre question, c'est-à-dire l'envoi de mot de passe entre les activités par une intention explicite, ceci est sécurisé dans la mesure où aucune autre application ne pourra l'intercepter et afficher la valeur. Cependant, la valeur des mots de passe doit être maintenue quelque part (mémoire ou disque) afin de la transmettre à votre activité secondaire. Si elle est maintenue sur le disque, il est assez facile à récupérer. Si elle est maintenue en mémoire, un attaquant qui accède à votre appareil peut l'arracher, puis effectuer une vidage de mémoire pour afficher les valeurs dans la mémoire. Ainsi, il n'est pas recommandé de traiter les mots de passe de cette façon.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.