2016-10-14 2 views
0

Il ya quelques jours, une personne a décompilé mon application et m'a montré un problème dans mon code source. J'ai été hardcoding les liens et le mot de passe de mon serveur dans le code source de l'application, je ne savais pas en décompilant tout le monde peut voir mon code source. J'utilise proguard mais proguard n'objecte pas les chaînes. Cela m'a laissé me demander comment est la bonne façon de faire cela? Comment mon application peut-elle effectuer des appels api et le serveur peut-il l'authentifier? J'ai fait une recherche mais je n'ai pas vu beaucoup de contenu en parler. Mon application ne gère pas les utilisateurs et les mots de passe. L'utilisateur et le mot de passe que je stocke dans mon code sont ceux qui se connectent sur le serveur.Android Server Communication Security

+0

Je crois que vous faites référence à cet article. http://stackoverflow.com/questions/14570989/best-practice-for-storing-private-api-keys-in-android –

Répondre

0

Oui, il est assez facile de voir le code Java décompilé pour obtenir des clés et autres.

Il y a quelques petites choses à faire:

  1. Vérifiez que les « clés d'application » ou « jetons » ne sont pas un secret avec des privilèges d'administrateur profonds. De nombreux fournisseurs SaaS/API vous fournissent plusieurs clés. L'une est une clé de client qui est limitée dans les privilèges/actions qui peuvent être effectués, et une clé de serveur qui a plus de privilèges mais qui ne sera pas divulguée via le code client. Dans votre cas, vous ne devez pas partager les mêmes mots de passe de connexion/d'administration du serveur. Levier Principe du moindre privilège (https://en.wikipedia.org/wiki/Principle_of_least_privilege)

  2. Assurez-vous que la chaîne est une finale statique. Dans ce cas, Compiler et Proguard qui autorisent l'insertion de chaînes. Cela rend un peu plus difficile de savoir à quoi sert la chaîne. Si vous possédez une seule classe "Config", il est assez facile de rechercher "facebook" dans facebookAppId, "secret" googleSecret, etc.

  3. Pour être vraiment sécurisé, vous pouvez effectuer un certain cryptage, ou un autre algorithme sur le chaîne, mais cela signifie également que vous stockez également le secret de chiffrement dans le code lui-même.

En général, je crois (1) donne le plus puisque vous devez toujours supposer une chaîne de client peut être trouvé/piraté, si Android/Java avec Proguard ou javascript minified.