Seguridad de SharedPreference de Android
Me pregunto sobre la seguridad de las preferencias compartidas.
¿Es posible tener acceso a las preferencias compartidas, incluso si se crearon en MODE_PRIV (0)?
¿Es posible listar todas las preferencias compartidas disponibles y luego buscar todas las configuraciones de otras aplicaciones?
¿Es un buen lugar para compartir datos confidenciales, como contraseña o símbolo de autenticación?
- Comprobar si existe URL o no en Servidor
- Asegurar una API REST accesible desde Android
- ¿Cómo se puede comprobar el permiso en tiempo de ejecución sin lanzar SecurityException?
- ¿Cómo puedo cero-ise una clave secreta en java?
- XmlHttpRequest problema de publicación doble en Android
Gracias
- Android - Almacenamiento de datos confidenciales en la base de datos sqlite
- Esquema de autenticación para una aplicación de Android: cuando la tarjeta SIM está bloqueada o cambiada por otra, la aplicación deja de funcionar
- ¿Existe una forma más segura de almacenar la cadena sensible en un proyecto de Android?
- Prevención de piratería de Android con solicitudes de servidor
- Es el partido (Uri) de la clase UriMatcher reentrante?
- La aplicación Detectar Android se está ejecutando en modo de depuración
- Seguridad de la carpeta de Android
- Cómo evitar que los elementos de compra de la aplicación de Android se rompan
Las Preferencias compartidas se almacenan como un archivo en el sistema de archivos del dispositivo. De forma predeterminada, se almacenan en el directorio de datos de la aplicación con las premisas de sistema de archivos establecidas que sólo permiten que el UID con el que se ejecuta la aplicación específica tenga acceso a ellas. Por lo tanto, son privados en tanto que los permisos de archivos de Linux restringen el acceso a ellos, lo mismo que en cualquier sistema Linux / Unix.
Cualquier persona con acceso root al dispositivo podrá verlos, ya que root tiene acceso a todo en el sistema de archivos. Además, cualquier aplicación que se ejecute con el mismo UID que la aplicación de creación sería capaz de acceder a ellos (esto no suele hacerse y es necesario tomar medidas específicas para hacer dos aplicaciones se ejecuta con el mismo UID, por lo que probablemente no es un gran preocupación). Por último, si alguien pudo montar el sistema de archivos de su dispositivo sin utilizar el sistema operativo Android instalado, también podría omitir los permisos que restringen el acceso.
Si le preocupa el acceso a sus preferencias (o cualquier otro dato escrito por su aplicación), deberá cifrarlo. Si usted está preocupado por ellos, va a necesitar averiguar exactamente cuánta protección es necesaria para el nivel de riesgo que usted ve. Hay una discusión muy extensa sobre esto en Seguridad de aplicaciones para la plataforma Android , que acaba de publicarse en diciembre de 2011 (descargo de responsabilidad: soy el autor de este libro).
SharedPreferences no son más que archivos XML en su carpeta de teléfonos / datos / datos /, por lo que cualquier aplicación o usuario con privilegios de superusuario en un dispositivo con raíz puede acceder a SharedPreferences, incluso si se crearon con MODE_PRIV
Todavía hay una manera de protegerlo de todo el mundo … Por favor, compruebe este enlace. Aquí puede almacenar datos en pref con cifrado, la clase es auto explicativa y muy fácil de usar.
https://github.com/sveinungkb/encrypted-userprefs
Como se ha dicho por otros cualquier persona puede acceder a ella, pero en este caso nadie puede leer los datos en su interior, ya que está cifrado. Por lo tanto, su máxima seguridad.Para mi sugerencia será generar la clave utilizada para el cifrado en tiempo de ejecución en lugar de codificación difícil. Hay muchas maneras de hacer eso 🙂
Normalmente, no, no pueden ser accedidas por otras aplicaciones, sin embargo, debe tener en cuenta que SharedPreferences se almacenan como archivos XML en el directorio /data/data/
, lo que significa que cualquier aplicación con privilegios de superusuario en un dispositivo con raíz puede acceder a SharedPreference
S, incluso si se crearon con MODE_PRIV