Android开发中的数据存储及其安全性分析

2016-03-08 02:59威海职业学院梁海丽
河北农机 2016年12期
关键词:安卓全局代码

威海职业学院 梁海丽

Android开发中的数据存储及其安全性分析

威海职业学院 梁海丽

本文首先介绍安卓开发中三种主要的数据存储方式,给出关键代码,之后分析了数据存储方式存在的安全隐患,并给出安全建议。

安卓;安全;数据存储

数据是程序操作的对象,所有的应用中都会涉及到数据的存储,其安全性也显得尤为重要。在美国Verizon公司发布的《2015年度数据泄露调查报告》中称:2015年,全球61个国家出现79790起数据泄露事件,其中2122起已经得到确认。数据被泄漏到任何非授权方的事故即为数据泄露。这些数据泄露事件带来的后果是可怕而长期的。

数据安全得到越来越多关注,本文从软件开发的角度出发,以安卓系统为平台,从数据存储的角度分析数据安全性。在安卓应用开发中,数据存储主要有三种方式,一是使用偏好Shared-Preferences存储;二是使用文件存储;三是使用数据库存储,下面将详细分析每种存储方式,以及存在的安全隐患,并给出合理的安全建议。

1 主要的数据存储方法

1.1 使用偏好存储

使用偏好可存储少量数据,如应用程序的配置信息、程序过程产生的少量数据等,这类数据通常格式简单,如是否开启欢迎界面、用户名或密码等信息。SharedPreferences存储的是键值对,数据存储底层以xml文件存储,保存在/data/data/<应用包名>/shared_prefs目录之下。存储的主要代码如下:

SharedPreferences sp=getSharedPreferences("fileName",Context.MODE_PRIVATE);

Editor ed=mysp.edit();

ed.putInt("age",12);

ed.commit();

1.2 使用文件存储

1.2.1 内部存储

安卓中的文件存储类似于Java的文件存储,通过Java提供的IO流即可实现数据的访问,默认读写的文件都存储在/data/data/<包名>/files的文件下。存储的主要代码如下:

FileOutputStream fos=Context.openFileOutput(“filename”, Context.MODE_PRIVATE);

out.write(content.getBytes("UTF-8"));

out.close();

1.2.2 外部存储

除了可以将文件存储在内部存储区外,还可以将软件存储到外部SD卡上,SD卡上可存储较大的文件,存储数据的主要代码如下:

if(Environment.getExternalStorageState().equals(Environment. MEDIA_MOUNTED)){

File path=Environment.getExternalStorageDirectory();

FileOutputStream fo=new FileOutputStream(path.getCanonical-Path()+“filename”);

fo.write(content);

fo.close();}

读写SD卡时,需要在AndroidManifest.xml中,添加读写SD卡的相应权限。

1.3 使用数据库存储

SQLite是安卓系统自带的轻量级关系数据库,在应用中创建数据库后,相应的数据库文件是存储在/data/data/<应用包名>/databases/下。

SQLiteOpenHelper是安卓提供的一个用于创建数据库的工具类,开发时需要继承该类,通过该类的getReadableDatabase()或getWritableDatabase()方法获取用于操作数据库的SQLiteDatabase实例,然后通过该实例的executeSQL(String sql)方法执行SQL语句或通过insert、delete等方法完成数据相应操作。

2 各种存储方式安全性分析

不论何种存储方式,从存储位置上分为内部存储和外部存储两种方式,除了SD卡存储外,上述介绍的存储方式都属于内部存储。SD卡是一个公共的存储空间,没有读写权限的管理,安卓应用只需要声明 READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE权限,即可随意创建、修改位于外部存储中的任何文件。因此,在实际开发中,重要的数据应使用内部存储。

利用偏好和文件进行内部存储时,打开文件的方式有三种,除了上面代码中的私有模式外,还有如下两种:

Context.MODE_WORLD_READABLE;全局读,数据可被所有应用读;

Context.MODE_WORLD_WRITEABLE);全局写,数据可被所有应用读、写。

显然,如果将文件模式设为全局读或全局写,存在着数据泄露的危险,是极不安全的,这两种模式在sdk4.2中已经被废除了。其次,即使设为私有模式,数据也不是绝对安全的,攻击者通过获得root权限同样可以获取到存储的数据。因此,即使采用内部存储,对于重要、敏感数据,如密码、聊天记录等,也要避免明文存储,一定要加密后再存储,可以从一定程度上确保数据的安全性。

3 结论

在实际开发中,除了本文提到的数据存储安全外,还有很多影响安全的因素,比如清单文件中不必要的权限,通过网络明文传输敏感信息等。作为软件开发人员,要充分认识到安全开发的重要性,并在实际开发中采取有效措施,保证软件的安全性。

[1]张元亮.Android开发应用实战详解[M].中国铁道出版社, 2011.

猜你喜欢
安卓全局代码
iPhone不卡的秘密曝光:安卓也能享受
Cahn-Hilliard-Brinkman系统的全局吸引子
量子Navier-Stokes方程弱解的全局存在性
文物表情包
创世代码
创世代码
创世代码
创世代码
落子山东,意在全局
一种基于安卓系统的手机侧抓包分析方法