Android数据存储安全规范

本文介绍了Android数据存储的多种方法,包括Shared Preferences、SQLite数据库等,并强调了敏感数据的安全存储。针对Shared Preferences,文章指出不应使用world-readable模式,并推荐使用AndroidX Security库的EncryptedSharedPreferences进行加密。同时,提醒开发者避免在未加密的SQLite数据库中存储敏感信息,提倡使用SQLCipher等加密手段。最后,讨论了内部和外部存储的安全注意事项。
摘要由CSDN通过智能技术生成

标题理论概述

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

保护身份验证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/<packagename>/shared_prefs/key.xml.

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

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="username">administrator</string>
<string name="password">supersecret</string>
</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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值