Je m'interroge sur la sécurité des préférences partagées.
Est-il possible d'accéder aux préférences partagées, même si elles ont été créées dans MODE_PRIV (0)?
Est-il possible de répertorier toutes les préférences partagées disponibles, puis de récupérer tous les paramètres d'autres applications?
Les préférences partagées sont-elles un bon endroit pour placer des données sensibles, telles qu'un mot de passe ou un jeton d'authentification?
Merci
android
security
sharedpreferences
Marek Sebera
la source
la source
Réponses:
Les préférences partagées sont stockées sous forme de fichier dans le système de fichiers de l'appareil. Ils sont, par défaut, stockés dans le répertoire de données de l'application avec des autorisations de système de fichiers définies qui permettent uniquement à l'UID avec lequel l'application spécifique s'exécute d'y accéder. Ainsi, ils sont privés dans la mesure où les autorisations de fichiers Linux en limitent l'accès, comme sur n'importe quel système Linux / Unix.
Toute personne disposant d'un accès de niveau racine à l'appareil pourra les voir, car root a accès à tout sur le système de fichiers. En outre, toute application qui s'exécute avec le même UID que l'application de création pourrait y accéder (ce n'est généralement pas fait et vous devez prendre des mesures spécifiques pour que deux applications s'exécutent avec le même UID, donc ce n'est probablement pas un gros préoccupation). Enfin, si quelqu'un pouvait monter le système de fichiers de votre appareil sans utiliser le système d'exploitation Android installé, il pouvait également contourner les autorisations qui restreignent l'accès.
Si vous êtes préoccupé par un tel accès à vos préférences (ou à toute donnée écrite par votre application), vous voudrez le crypter. Si cela vous préoccupe, vous devrez déterminer exactement le niveau de protection nécessaire pour le niveau de risque que vous voyez. Il y a une discussion très approfondie à ce sujet dans Application Security for the Android Platform , qui vient de paraître en décembre 2011 (avertissement: je suis l'auteur de ce livre).
la source
Les SharedPreferences ne sont rien d'autre que des fichiers XML dans votre dossier téléphones / data / data /, donc toute application ou utilisateur avec des privilèges de superutilisateur sur un appareil enraciné peut accéder à vos SharedPreferences, même s'ils ont été créés avec MODE_PRIV
Il existe toujours un moyen de le protéger de tout le monde ... Veuillez consulter ce lien. Ici, vous pouvez stocker des données en pref avec cryptage, la classe est explicite et très facile à utiliser.
https://github.com/sveinungkb/encrypted-userprefs
Comme d'autres l'ont dit, tout le monde peut y accéder, mais dans ce cas, personne ne peut lire les données à l'intérieur car elles sont cryptées. Donc , son secure.For Utmost sécurité ma suggestion sera de générer la clé utilisée pour le chiffrement au moment de l' exécution plutôt que difficile coder. Il y a plusieurs façons de faire ça :)
la source
SharedPref
. Mais alors, que faire de l'autre clé? Sérieusement, le meilleur scénario serait d'envoyer la clé cryptée et un UID de périphérique à un serveur utilisant SSL pour y être stockés et récupérés si nécessaire. Cela nécessiterait une connectivité, mais vous permettrait de mettre sur liste noire un appareil et de mettre toutes les données à la poubelle. Sans connexion Internet constante, toute tentative de chiffrement des données n'est pas sûre à 100%.Normalement, non, elles ne sont pas accessibles par d'autres applications, cependant, vous devez noter que les SharedPreferences sont stockées sous forme de fichiers XML dans le
/data/data/
répertoire, ce qui signifie essentiellement que toute application avec des privilèges de superutilisateur sur un appareil enraciné peut accéder à vosSharedPreference
s, même si elles étaient créé avecMODE_PRIV
la source
Est-il possible d'accéder aux préférences partagées, même si elles ont été créées dans MODE_PRIV (0)?
Par n ° de code Mais vous pouvez récupérer le fichier d'application si vous avez des privilèges de super utilisateur.
Est-il possible de répertorier toutes les préférences partagées disponibles, puis de récupérer tous les paramètres d'autres applications?
Si vous êtes un super utilisateur (appareils rootés), vous pouvez extraire tous les fichiers privés de l'application.
Les préférences partagées sont-elles un bon endroit pour placer des données sensibles, telles qu'un mot de passe ou un jeton d'authentification?
Non, il peut être facilement piraté. Si vous souhaitez mettre des données sensibles dans un fichier de préférence partagé, vous pouvez crypter les données et les stocker. Vous pouvez stocker votre clé de chiffrement dans NDK / serveur.
la source