Me pregunto acerca de la seguridad de las preferencias compartidas.
¿Es posible acceder a las preferencias compartidas, incluso si se crearon en MODE_PRIV (0)?
¿Es posible enumerar todas las preferencias compartidas disponibles y luego recuperar todas las configuraciones de otras aplicaciones?
¿Las preferencias compartidas son un buen lugar para colocar datos confidenciales, como contraseña o token de autenticación?
Gracias
android
security
sharedpreferences
Marek Sebera
fuente
fuente
Respuestas:
Las preferencias compartidas se almacenan como un archivo en el sistema de archivos del dispositivo. Se almacenan, de forma predeterminada, en el directorio de datos de la aplicación con permisos del sistema de archivos establecidos que solo permiten que el UID con el que se ejecuta la aplicación específica acceda a ellos. Por lo tanto, son privados en la medida en que los permisos de archivos de Linux restringen el acceso a ellos, al igual que en cualquier sistema Linux / Unix.
Cualquiera con acceso de nivel de 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 creadora podría acceder a ellos (esto no se suele hacer y debe tomar una acción específica para que dos aplicaciones se ejecuten con el mismo UID, por lo que probablemente no sea un gran problema). preocupación). Finalmente, si alguien pudo montar el sistema de archivos de su dispositivo sin usar el sistema operativo Android instalado, también podría omitir los permisos que restringen el acceso.
Si le preocupa dicho acceso a sus preferencias (o cualquier dato escrito por su aplicación), entonces querrá cifrarlo. Si está tan preocupado por ellos, tendrá que averiguar exactamente cuánta protección es necesaria para el nivel de riesgo que ve. Hay una discusión muy extensa sobre esto en Application Security for the Android Platform , recién publicado en diciembre de 2011 (descargo de responsabilidad: soy el autor de este libro).
fuente
SharedPreferences no son más que archivos XML en sus teléfonos / datos / datos / carpeta, por lo que cualquier aplicación o usuario con privilegios de superusuario en un dispositivo rooteado puede acceder a sus SharedPreferences, incluso si fueron creadas con MODE_PRIV
Aún así, hay una manera de protegerlo de todos ... Por favor, consulte este enlace. Aquí puede almacenar datos en pref con cifrado, la clase es autoexplicativa y muy fácil de usar.
https://github.com/sveinungkb/encrypted-userprefs
Como han dicho otros, cualquiera puede acceder a él, pero en este caso nadie puede leer los datos que contiene, ya que está cifrado. Por lo que su secure.For Máxima seguridad de mi sugerencia será generar la clave utilizada para el cifrado en tiempo de ejecución en lugar de codificar duro ella. Hay muchas formas de hacerlo :)
fuente
SharedPref
. Pero entonces, ¿qué hacer con la otra llave? Sin embargo, en serio, el mejor escenario sería enviar la clave cifrada y un UID de dispositivo a un servidor que usa SSL para que se almacene allí y se recupere según sea necesario. Eso requeriría conectividad, pero le permitiría incluir un dispositivo en la lista negra y, de repente, eliminar todos los datos. Sin una conexión constante a Internet, cualquier intento de cifrar datos no es 100% seguro.Normalmente, no, otras aplicaciones no pueden acceder a ellos, sin embargo, debe tener en cuenta que SharedPreferences se almacenan como archivos XML en el
/data/data/
directorio, lo que esencialmente significa que cualquier aplicación con privilegios de superusuario en un dispositivo rooteado puede acceder a sus correos electrónicosSharedPreference
, incluso si lo estuvieran creado conMODE_PRIV
fuente
¿Es posible acceder a las preferencias compartidas, incluso si se crearon en MODE_PRIV (0)?
Por código No. Pero puede recuperar el archivo de la aplicación si tiene privilegios de superusuario.
¿Es posible enumerar todas las preferencias compartidas disponibles y luego recuperar todas las configuraciones de otras aplicaciones?
Si es un superusuario (dispositivos rooteados), puede extraer todos los archivos privados de la aplicación.
¿Las preferencias compartidas son un buen lugar para colocar datos confidenciales, como contraseña o token de autenticación?
No. Se puede piratear fácilmente. Si desea poner datos confidenciales en un archivo de preferencias compartido, puede cifrar los datos y almacenarlos. Puede almacenar su clave de cifrado en NDK / server.
fuente