Android数据存储安全规范

标题理论概述

存储数据对于移动应用程序至关重要,应将尽可能少的敏感数据存储在永久性本地存储中,但是在大多数实际场景中,必须存储某种类型的用户数据。如果敏感数据没有受到应用程序适当保护,就很容易受到攻击。

保护身份验证Token、私人信息和其他敏感数据是移动应用安全的关键。

保存数据的准则概括:公共数据应该对所有人可用,但敏感和私有数据必须受到保护,或者更好的是将敏感数据存储在设备存储之外。

除了保护敏感数据之外,还需要确保从任务存储源读取的数据都应该经过验证。

数据存储方法概述

Android根据用户需求提供了多种数据存储的方法,以下介绍 Android平台常用的几种数据存储方法:

Shared Preferences

SQLite Databases

Firebase Databases

Realm Databases

Internal Storage

External Storage

Keystore

Shared Preferences

SharedPreferences API通常用于永久保存小的集合,用Key- Value的形式存储。数据存储通过SharedPreferences 对象写入XML文件。SharedPreferences 对象有两种模式 world-readable(所有App都可以访问)和private。误用SharedPreferences API常常会导致敏感数据暴漏。

参考例子:

SharedPreferences sharedPref = getSharedPreferences("key", MODE_WORLD_READABLE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString("username", "administrator");
editor.putString("password", "supersecret");
editor.commit();

一旦代码被执行,key.xml文件将被创建,并存储数据。这段代码违反了几种最佳实践:

  • The username and password are stored in clear text in
    /data/data//shared_prefs/key.xml.

username和password以明文的形式存储在/data/data//shared_prefs/key.xml.


<map>
<string name="username">administratorstring>
<string name="password">supersecretstring>
map>
MODE_WORLD_READABLE allows all applications to access and read the contents of
key.xml.

MODE_WORLD_READABLE 允许所有应用去访问和读取 key.xml 的内容。
root@hermes:/data/data/sg.vp.owasp_mobile.myfirstapp/shared_prefs # ls -la-rw-rw-r-- u0_a118 170 2016-04-23 16:51 key.xml

请注意 MODE_WORLD_READABLE 和 MODE_WORLD_WRITEABLE 在 API 17 已被弃用。尽
管较新的设备可能不受此影响,但使用 Android:targetSdkVersion 值小于 17 编译的应用
程序,如果运行在 Android 4.2 之前发布的操作系统版本上运行,则可能会受到影响。

最佳实践

  • 强烈建议使用MODE_PRIVATE。
    getSharedPreferences(“filename”,Context.MODE_PRIVATE);
  • Encrypting Shared Preferences with the AndroidX Security Library
    对于敏感数据存储,使用AndroidX 安全库提供的EncryptedSharedPreferences

备注: 仅支持minSdkVersion 23及以上。
使用SharedPreferences存储数据是明文的,当我们存储敏感数据的时候需要进行加密,避免敏感数据泄漏。值得庆幸的是 AndroidX Security library被添加,让min-sdk为23+应用使用SharedPreferences存储加密变得容易和方便。

参考:https://bignerdranch.com/blog/encrypting-shared-preferences-with-the-androidx-security-li

你可能感兴趣的:(Android,App安全)