`
daibalusu
  • 浏览: 344314 次
文章分类
社区版块
存档分类
最新评论

【Android应用开发】-(7)安全性设计(完整版请参考官方)

 
阅读更多

Android的设计为大多数开发者能够使用默认的设置构建应用程序,而不需要在安全性方面作出更多的思考。Android还有许多操作系统内置的安全功能,大幅度减少应用程序安全性的问题和频率。

一些安全特性可以帮助开发人员构建安全的应用程序,其中包括:

1、Android应用程序沙箱在每个应用程序的基础上分离数据和执行代码。

2、 Android应用程序框架实现了共同的安全功能,如加密,权限,安全的进程间通信。

3、像ASLR, NX, ProPolice, safe_iop,OpenBSD dlmalloc, OpenBSD calloc, 和 Linux mmap_min_addr 的技术以减轻相关的风险与常见的内存分配错误

4、加密的文件系统可保护设备数据丢失或被盗

然而,重要的是为开发人员熟悉Android安全的最佳做法,以确保开发者使用这些个功能的优势,减少无意引入的安全问题,这些无意引入的问题可能影响到应用程序的安全性。

本文档围绕共同的API和开发技术,可以为你的应用程序及用户的安全隐患提供最佳的做法,而最佳实践是不断发展的,建议随时检测应用程序的开发过程

本文包括:

Ø 使用虚拟机代码

Ø 使用本地代码

Ø 数据存储

Ø 使用IPC

Ø 使用权限

Ø 使用网络

Ø 动态加载代码

Ø 执行输入验证

Ø 处理用户数据

Ø 使用加密

1) 使用虚拟机代码

编写安全的代码在虚拟机中运行是一个研究性的课题,很多问题都没有具体到Android中,这里并不企图重提这些话题,建议使用已有的文献,请看下面的两个链接:

1、http://www.securingjava.com/toc.html

2、https://www.owasp.org/index.php/Java_Security_Resources

这篇文章重点关注Android特性或者不同环境下的安全性问题。对于在其他虚拟机环境中有编程经验的开发者,也有可能编写Android应用程序,其中有两大问题:

3、一些虚拟机,如JVM或.net运行时,作为一个安全边界,从底层操作系统功能上隔离代码。在Android上,Dalvik虚拟机并不是一个安全边界,在操作系统级别上实现应用程序沙箱,这样,虚拟机能够在没有任何安全限制下,在相同的应用程序中操作本地代码。

4、考虑到移动设备上有限的存储空间,使得开发者都愿意建立模块化的应用程序,并实现动态加载。当考虑到这两点,要确保源和应用程序逻辑都存储在本地。没有验证的来源不要使用动态加载,不安全的网络资源或外部存储等,因为这些代码可以修改,可能包含着恶意行为。

2) 使用本地代码

一般情况下,我们鼓励开发者使用Android SDK开发应用程序,而不是使用本机代码(*.so),本地代码构建的应用程序更复杂,更便携,但对于常见的内存损坏错误,如缓冲区溢出等问题不好控制。

Android是使用Linux内核,如果你要使用本机代码,那么熟悉Linux开发安全的最佳方法是非常有必要的。讨论这些最佳做法这篇文章是太短了,但可以参考Linux和Unix的“安全编程”,可点击此链接查看:http://www.dwheeler.com/secure-programs

Android和大多数Linux环境之间的一个重要却别是应用程序沙箱。在Android中,所有的应用程序运行都在应用程序沙箱,包括本机代码。在最基本的水平,熟悉Linux的开发人员认为它是一个好办法,要知道,每个应用程序都被赋予一个唯一的UID,以及非常有限的权限。在Android安全性概述中将详细讨论这个问题,你应该熟悉应用程序的权限,即使您在使用本地代码。

3) 存储数据

1、使用内部文件

在默认情况下,Android创建文件只能创建在内部存储器上,这种保护是由Android实现的,对于大多数应用程序这以及足够了,因为不提供特定应用程序访问数据格式的能力,也不提供任何数据的控制能力,作为一个替代的方案,你可以考虑使用ContentProvider提供读取和写入权限,可以动态授权。

为敏感数据提供额外的保护,一些应用程序选择用一个Key加密本地的文件。(例如,一个键可以被放置在一个KeyStore保护用户密码但不存储在设备上)。虽然这并不从根本上进行保护,如果设备丢失,并且没有对文件系统加密,那么它可以通过监视用户输入的密码保护数据。

2、使用外部存储

在外部存储中创建文件,如:SD卡,能够供所有程序读写。由于外部存储可由用户移除,任何应用程序都可以修改存储数据。建议应用程序不要使用外部存储器存储敏感信息

任何不可信任的数据来源,从外部存储数据时应用程序应该要执行输入验证。我们强烈建议应用程序动态加载之前保存在外部存储的可执行文件或类文件。如果应用程序是从外部存储检索可执行文件,应该签署和加密验证的动态加载之前。

3、使用Context providers

ContentProviders提供了结构化的存储机制。可在自己的应用程序中允许或限制其他应用访问。默认情况下,一个ContentProviders允许其他应用程序使用。如果不打算其他应用程序访问你的ContentProvider,可在应用程序的mainfest中设置android:exported=false。

当创建一个ContentProvider给其他应用程序使用,可单独指定读/写权限。建议给定的权限能完成当前的工作即可。

如果你使用ContentProvider在统一开发者不同应用程序中进行数据共享,最好使用签名级别的权限。签名权限不需要用户确认,这样可提供更好的用户体验和访问控制。

更多的设计方法请看官方文档,能看懂意思但还没到达翻译的水平,也就写到这里好了。我想我更多的任务可能还是下文,而非翻译。实在抱歉~

4) 使用IPC

5) 使用权限

6) 使用网络

7) 动态加载代码

8) 执行输入验证

9) 处理用户数据

10)使用加密

原创文章,转载请注明出处:http://blog.csdn.net/tangcheng_ok

分享到:
评论

相关推荐

    Google Android SDK开发范例大全(完整版)

    开始开发 Android 应用程序的最简捷的方式是下载 Android SDK 和 Eclipse IDE(参见 参考资料)。Android 开发可以在 Microsoft® Windows®、Mac OS X 或 Linux 上进行。 本文假设您使用的是 Eclipse IDE 和用于 ...

    android 完全中文版 开发应用详解

    1.2.2 android应用开发 8 1.2.3 android系统开发 9 1.3 android的sdk与源代码 10 1.3.1 基于sdk的android开发 10 1.3.2 基于源代码sdk android开发 11 第2章 android系统开发综述 13 2.1 android的系统架构 13 2.1.1...

    Android程序设计基础

    2.5 安全性 20 2.6 快速阅读指南 21 第二部分 Android基础知识 23 第3章 设计用户界面 25 3.1 数独游戏简介 25 3.2 声明性设计 26 3.3 创建启动界面 27 3.4 使用替代资源 34 3.5 实现About对话框 37 3.6 ...

    精通ANDROID 3(中文版)1/2

    2.5 剖析Android应用程序的结构  2.6 分析Notepad应用程序  2.6.1 加载和运行Notepad应用程序  2.6.2 分解应用程序  2.7 了解应用程序生命周期  2.8 调试应用程序  2.8.1 启动模拟器  2.8.2 ...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    鉴于市场上用户的手机型号、种类、屏幕分辨率等参差不齐,传统方式根据主流系统分别开发相应的系统耗时又耗力,为了高效开发并节约开发项目成本,本文采用Android+HTML5相结合的方式进行移动端Web系统的设计研发工作...

    精通Android 3 (中文版)2/2

    2.5 剖析Android应用程序的结构  2.6 分析Notepad应用程序  2.6.1 加载和运行Notepad应用程序  2.6.2 分解应用程序  2.7 了解应用程序生命周期  2.8 调试应用程序  2.8.1 启动模拟器  2.8.2 ...

    adb1.0.26包含fastboot.exe

    ADB,即 Android Debug Bridge,它是 Android 开发/测试人员不可替代的强大工具,也是 Android 设备玩家的好玩具。 注:有部分命令的支持情况可能与 Android 系统版本及定制 ROM 的实现有关。 基本用法 命令语法 ...

    Google Chrome 6.0.451.0 Dev 版(一个由Google公司开发的网页浏览器)

    本软件的代码是基于其他开放源代码软件所撰写,包括WebKit和Mozilla,目标是提升稳定性、速度和安全性,并创造出简单且有效的使用者界面。软件的名称是来自于又称作“Chrome”的网络浏览器图形使用者界面(GUI)。 ...

    Git权威指南PDF完整版

    19.6 分支和里程碑的安全性/ 294 第20章 补丁文件交互/ 296 20.1 创建补丁/ 296 20.2 应用补丁/ 297 20.3 StGit 和 Quilt/ 300 20.3.1 StGit/ 300 20.3.2 Quilt/ 304 第4篇 Git协同模型 第21章 经典Git协同模型/ 308...

    JAVA上百实例源码以及开源项目

    此时此景,笔者只专注Android、Iphone等移动平台开发,看着这些源码心中有万分感慨,写此文章纪念那时那景! Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这...

    JAVA上百实例源码以及开源项目源代码

    此时此景,笔者只专注Android、Iphone等移动平台开发,看着这些源码心中有万分感慨,写此文章纪念那时那景! Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这...

Global site tag (gtag.js) - Google Analytics