Je m'interroge sur la sécurité des préférences partagées.
Est-il possible d'avoir accès 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 d'extraire 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
Les préférences partagées sont stockées sous forme de fichier dans le système de fichiers sur le périphérique. 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 qui permettent uniquement à l'UID avec lequel l'application spécifique est exécutée 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 tout système Linux/Unix.
Toute personne ayant accès au périphérique au niveau racine pourra les voir, car la racine a accès à tout ce qui se trouve sur le système de fichiers. En outre, toute application fonctionnant avec le même UID que l’application de création serait en mesure d’y accéder (ce n’est généralement pas le cas et vous devez prendre des mesures spécifiques pour faire en sorte que deux applications s’exécutent avec le même UID; préoccupation). Enfin, si quelqu'un était capable de monter le système de fichiers de votre appareil sans utiliser le système d'exploitation = Android installé), il pourrait également contourner les autorisations qui restreignent l'accès.
Si un tel accès à vos préférences (ou à toute donnée écrite par votre application) vous préoccupe, vous voudrez alors le chiffrer. Si cela vous inquiète, il vous faudra déterminer exactement combien de protection est nécessaire pour le niveau de risque que vous voyez. Il y a une très longue discussion à ce sujet dans Application Security pour la Android Platform , récemment parue en décembre 2011 (disclaimer: je suis l'auteur de ce livre).
Les références partagées ne sont rien d'autre que des fichiers XML dans votre dossier phones/data/data/data. Ainsi, toute application ou utilisateur disposant de privilèges de superutilisateur sur un appareil enraciné peut accéder à vos références partagées, même si elles ont été créées avec MODE_PRIV.
Toujours il existe un moyen de le protéger contre tout le monde ... S'il vous plaît vérifiez 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 l'ont dit d'autres personnes, tout le monde peut y accéder, mais dans ce cas, personne ne peut y lire les données car elles sont cryptées. Donc, sa sécurité est sécurisée. Pour ultime , je suggère de générer la clé utilisée pour le chiffrement au moment de l'exécution plutôt que de la coder en dur. Il y a plusieurs façons de le faire :)
Normalement, non, elles ne sont pas accessibles aux autres applications. Cependant, notez que les SharedPreferences sont stockées sous forme de fichiers XML dans le répertoire /data/data/
, Ce qui signifie essentiellement que any application avec - privilèges de superutilisateur sur un périphérique enracinépeut accéder à votre SharedPreference
s, même s’ils ont été créés avec MODE_PRIV
Est-il possible d'avoir accès aux préférences partagées, même si elles ont été créées dans MODE_PRIV (0)?
Par numéro 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 d'extraire tous les paramètres d'autres applications?
Si vous êtes super utilisateur (appareils enracinés), vous pouvez extraire tous les fichiers privés de l'application.
Le partage des préférences est-il un bon endroit pour mettre des données sensibles, telles que mot de passe ou jeton d'authentification?
Non, il peut être facilement piraté. Si vous souhaitez placer des données sensibles dans un fichier prefrence partagé, vous pouvez les chiffrer et les stocker. Vous pouvez stocker votre clé de cryptage dans NDK/serveur.