【Android平台安全方案】の #00-请不要在外部存储(SD卡)加密存储的敏感信息
Android提供了几种保存持久化应用数据的选择,当中之中的一个就是外部存储(/sdcard, /mnt/sdcard)。外部存储包含设备内部的微型或标准大小的SD卡。挂载到PC上的Android设备存储卡以及Android/obb文件夹。
Android4.1之前的版本号。存放在外部存储的文件是world-readable(可以被不论什么用户读取的)和world-writable(可以被不论什么用户写入)。从Android4.1到Android4.3,一个app想要写入外部存储的随意文件时,仅仅需在AndroidManifest文件里声明WRITE_EXTERNAL_STORAGE权限。但从Android4.4開始,引入了基于文件夹结构创建分组和文件模式。这使得一个app在外部存储中的仅仅能在以自己包名命名的文件夹下才具有文件的读写权限。
非系统级的app仅仅同意在Android/data/<package-name>/文件夹下操作。因此。每一个app的文件读写权限被独立开来。不能互相訪问。
上面描写叙述的訪问权限限制的不足。导致写入到外部存储的文件可能存在被同一设备上不同的app改动和读取的风险(Android4.4之前版本号)。
Android API指南[Android Guild 2013]关于Storage Options给出了例如以下的警告信息:假设用户将外部存储挂载到PC上或者直接移除了,会导致外部存储不可用,并且没有安全措施保证存放在外部存储上的文件。全部的应用都能够读写存放在外部存储的文件。并且用户能够任意删除它。
开发人员不应该在外部存储中存放未加密的敏感信息,由于外部存储的文件不能保证可用性,完整性和保密性。
[不符合安全要求的代码演示样例]
以下的代码在外部存储中创建一个文件,并保存了敏感的信息。
private String filename = "myfile" private String string = "sensitive data such as credit card number"
FileOutputStream fos = null; try {
file file = new File(getExternalFilesDir(TARGET_TYPE), filename);
fos = new FileOutputStream(file, false);
fos.write(string.getBytes());
} catch (FileNotFoundException e) {
// handle FileNotFoundException
} catch (IOException e) {
// handle IOException
} finally {
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
}
}
}
[概念验证]
一个应用一般存放在外部存储的文件文件夹结构例如以下所看到的:
/sdcard/Android/data/com.company.app/files/save/appdata/save_appdata
[符合安全要求的解决方式#1 将文件保存到内部存储中]
以下的代码使用openFileOutput()方法在应用的data文件夹中创建“myfile”文件,并将訪问权限设置为MODE_PRIVATE。这样保证其它app訪问不了该文件。
private String filename = "myfile"
private String string = "sensitive data such as credit card number"
FileOutputStream fos = null; try {
fos = openFileOutput(filename, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();
} catch (FileNotFoundException e) {
// handle FileNotFoundException
} catch (IOException e) {
// handle IOException
} finally {
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
}
}
}
[符合安全要求的解决方式#2]
在将文件保存到外部存储之前。先对文件内容进行加密。
——欢迎转载,请注明出处 http://blog.csdn.net/asce1885 ,未经本人允许不得用于商业用途。谢谢——
【Android平台安全方案】の #00-请不要在外部存储(SD卡)加密存储的敏感信息的更多相关文章
- Android相机、相册获取图片显示并保存到SD卡
Android相机.相册获取图片显示并保存到SD卡 [复制链接] 电梯直达 楼主 发表于 2013-3-13 19:51:43 | 只看该作者 |只看大图 本帖最后由 happy小妖同学 ...
- Android全屏截图的方法,返回Bitmap并且保存在SD卡上
Android全屏截图的方法,返回Bitmap并且保存在SD卡上 今天做分享,需求是截图分享,做了也是一个运动类的产品,那好,我们就直接开始做,考虑了一下,因为是全屏的分享,所有很自然而然的想到了Vi ...
- 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)
1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name= ...
- android 数据存储<一>----android短信发送器之文件的读写(手机+SD卡)
本文实践知识点有有三: 1.布局文件,android布局有相对布局.线性布局,绝对布局.表格布局.标签布局等,各个布局能够嵌套的. 本文的布局文件就是线性布局的嵌套 <LinearLayout ...
- Android之外部存储(SD卡)
*手机的外部存储空间,这个我们可以理解成电脑的外接移动硬盘,U盘也行.所有的Android设备都有两个文件存储区域:“内部”和“外部”存储器.这两个名称来自早期的Android,当时大多数设备都提供内 ...
- android 数据存储----android短信发送器之文件的读写(手机+SD卡)
本文实践知识点有有三: 1.布局文件,android布局有相对布局,线性布局,绝对布局,表格布局,标签布局等.各个布局能够嵌套的.本文的布局文件就是线性布局的嵌套 <LinearLayout x ...
- android:http下载文件并保存到本地或SD卡
想把文件保存到SD卡中,一定要知道SD卡的路径,获取SD卡路径: Environment.getExternalStorageDirectory() 另外,在保存之前要判断SD卡是否已经安装好,并且可 ...
- android中使用Http下载文件并保存到本地SD卡
1.AndroidMainfest.xml中设置权限 <uses-permission android:name="android.permission.INTERNET"& ...
- Android——数据存储:手机外部存储 SD卡存储
xml <EditText android:layout_width="match_parent" android:layout_height="wrap_cont ...
随机推荐
- System.ComponentModel.BackgroundWorker在WinForm中的异步使用
为了防止操作过程中界面卡死,和WinForm搭配最适合的就是BackgroundWorker了.BackgroundWorker 类 using System; using System.Compon ...
- bsh for android : 北京
beanshell : bjtime.bsh source("/sdcard/com.googlecode.bshforandroid/extras/bsh/android.bsh" ...
- 移动端 常见问题整理 iOS下的 Fixed + Input 调用键盘的时候fixed无效问题解决方案
使用iScroll时,input等不能输入内容的解决方法 <script> function allowFormsInIscroll(){ [].slice.call(document.q ...
- [ExtJS5学习笔记]第22 Extjs5正在使用beforeLabelTpl添加所需的配置选项标注星号标记
本文地址:http://blog.csdn.net/sushengmiyan/article/details/39395753 官方样例:http://docs.sencha.com/extjs/5. ...
- Spring配置与第一Spring HelloWorld
林炳文Evankaka原创作品. 转载请注明出处http://blog.csdn.net/evankaka 本文将主讲了Spring在Eclipse下的配置,并用Spring执行了第一个HelloWo ...
- java 它 引用(基本类型的包装,构造函数和析构函数c++不同)
一个:java 和c++参考控制 他提到引用,我们会想到java它不喜欢c++里面的指针.当然java内引用和c++里面的引用是不同的. 比如: 比方C++中,我对某一个函数的声明.int a(i ...
- JBehave
JBehave 上篇我们说到如何从Github上clone出一个JBehave项目,既是为了学习JBehava,也是为了熟悉下Github.从clone下来的项目看来,基本没什么问题,稍微捋一捋就可以 ...
- jQuery的使用及关于框架造型(转)
Introduction 正如jQuery所宣称的一样,Write Less, Do More.很多时候我们喜欢用它来解决问题.但增加一个库必然意味着更大的网络负担,意味着更高的页面初始载入时间.并且 ...
- JavaScript省市联动菜单
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 记2014“蓝桥杯全国软件大赛"决赛北京之行
5月29,30日 最终到了这一天.晚上有数据结构课,10点多的火车,我们就没有去上课,下午在宿舍里收拾东西,晚上8点左右从南校出发,9点半多到达火车站和老师学长学姐们会和. 第一次去北京,第一次买的卧 ...