http://developer.android.com/training/articles/security-tips.html
1.数据存储
内部存储
internal storage存储的数据,只能由App自己访问。
如果是敏感数据,推荐使用KeyStore。
外部存储
外部存储,例如SD卡,任何app都可以读写,也可以被用户移除,所以不能用来存储敏感数据。
如果处理来自外部存储的数据,必须要做验证。
强烈建议不要存储可执行文件,或者用于动态加载的类文件。如果一定要这么做,这些文件必须签名并加密。
Content Provider
他提供了一种结构化的存储机制来限制自己的app或者其他app访问限定的内容,
如果你不打算让其他的app访问你的content provider,设置android:exported=false
如果创建了Content Provider给其他app使用,必须指明相应的权限。
如果使用content provider在几个app之间共享数据,需要android:protectionLevel =signature

2.权限
请求权限
尽可能的减少请求的权限,例如数据保存在内部存储区而不是保存在外部存储区。
创建权限
尽量少定义一些权限。
如果定义权限,必须有一个字符串明确的告诉用户做了什么,字符串必须翻译,用户可以拒绝这个要求而不安装app。

3.网络
IP网络
因为移动设备经常频繁的连接没有加密的网络,例如公共Wi-Fi热点,所以推荐使用Https而不是Http。
http访问推荐使用HttpsURLConnection,Socket访问,推荐使用SSLSocket。
App使用localHost来处理进程间通讯,这种方式并不推荐,因为可以被其他app利用。最好使用Service。
不要信赖http或者其他非安全协议下载的数据。
移动数据
不要用短信来存储或者传递敏感数据,因为其他App可以读取短信。

4.验证输入
如果使用native code,从网络、其他进程传过来的数据都可能引入安全问题。
注意访问script或者sql 注入攻击。

5.处理用户数据
尽量避免存储或者传输用户敏感的数据,例如email.
如果需要访问用户名密码之类的信息,可能需要提供隐私保护策略给用户。
请不要暴露敏感数据给第三方不信任的App。
如果需要GUID,自己创建一个,不要使用IMEI或者手机序列号。
慎重使用设备log,log也是一种共享资源,其他App可以请求Read_Logs权限来访问log。

6.WebView
webView会加载HTML和Javascript,可能引入跨站点攻击。如果不需要使用javascript,请不要调用setJavaScriptEnabled().
addJavaScriptInterface() 最好只给自己的App使用。
如果使用webView访问了敏感数据,记得清理缓存。

7.凭据
尽量不要向用户请求Credentials。
如果可能的话,尽量不要在设备上存储用户名和密码,推荐使用短期有效的token。
使用AccountManager来处理一些凭据信息,或者Keystore,Keychain。

8.加密
如果需要自定义加密算法,推荐使用系统的AES胡总和RSA

9.进程间通信
推荐使用Intent,Binder,Messenger,Servier,BroadCast,而不是传统的linux技术实现。

10.Intent
如果Intent传递的数据包含敏感信息,需要制定权限,保证拥有权限的app可以接收。

11.Service
默认情况下,Service不要export,不要被其他App调用。
如果需要,请加上权限,
调用之前,可以用 checkCallingPermission() 检查一下

12 binder and messenger
定义权限和接口

13. broadcast receiver
这个可以被任何一个app调用,注意定义权限

14 动态加载代码
强烈建议不要从外部动态加载代码,如果需要,请签名并使用DexClassLoader.。

15 虚拟机安全
不推荐动态加载代码

16 Native Code
尽量使用Android SDK,实在不行,使用Android NDK。

Android 安全提示 笔记的更多相关文章

  1. Android自动化学习笔记:编写MonkeyRunner脚本的几种方式

    ---------------------------------------------------------------------------------------------------- ...

  2. Android自动化学习笔记之MonkeyRunner:官方介绍和简单实例

    ---------------------------------------------------------------------------------------------------- ...

  3. Android 数字签名学习笔记

    Android 数字签名学习笔记 在Android系统中,所有安装到系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系,如果一个permission的pro ...

  4. Android群英传笔记——第十二章:Android5.X 新特性详解,Material Design UI的新体验

    Android群英传笔记--第十二章:Android5.X 新特性详解,Material Design UI的新体验 第十一章为什么不写,因为我很早之前就已经写过了,有需要的可以去看 Android高 ...

  5. Android群英传笔记——第十章:Android性能优化

    Android群英传笔记--第十章:Android性能优化 随着Android应用增多,功能越来越复杂,布局也越来越丰富了,而这些也成为了阻碍一个应用流畅运行,因此,对复杂的功能进行性能优化是创造高质 ...

  6. Android群英传笔记——第二章:Android开发工具新接触

    Android群英传笔记--第二章:Android开发工具新接触 其实这一章并没什么可讲的,前面的安装Android studio的我们可以直接跳过,如果有兴趣的,可以去看看Google主推-Andr ...

  7. Android:日常学习笔记(8)———探究UI开发(2)

    Android:日常学习笔记(8)———探究UI开发(2) 对话框 说明: 对话框是提示用户作出决定或输入额外信息的小窗口. 对话框不会填充屏幕,通常用于需要用户采取行动才能继续执行的模式事件. 提示 ...

  8. Android:日常学习笔记(10)———使用LitePal操作数据库

    Android:日常学习笔记(10)———使用LitePal操作数据库 引入LitePal 什么是LitePal LitePal是一款开源的Android数据库框架,采用了对象关系映射(ORM)的模式 ...

  9. Android Studio 学习笔记(一)环境搭建、文件目录等相关说明

    Android Studio 学习笔记(一)环境搭建.文件目录等相关说明 引入 对APP开发而言,Android和iOS是两大主流开发平台,其中区别在于 Android用java语言,用Android ...

随机推荐

  1. Spark Streaming 执行流程

    Spark Streaming 是基于spark的流式批处理引擎,其基本原理是把输入数据以某一时间间隔批量的处理,当批处理间隔缩短到秒级时,便可以用于处理实时数据流. 本节描述了Spark Strea ...

  2. junit import org.junit.Test 报错

    由于用的是父-子项目 在自项目中各种改都不行,还是报错,而且子项目中明明已经导入了还在报错,后面发现是父项目中的scope是test 注释掉就好了

  3. 前端常用功能记录(三)—datatables表格初始化(转)

    数据源 我经常使用的有两种,一种是JavaScript 中的数组,通过在初始化对象中传递一个名为 aaData 的数组,同样可以提供表格数据,前缀 aa 说明这是一个数组的数组,外层的数组表示表格的行 ...

  4. Android——计算器第一次完善

    完善: 1- 处理首位为0 2- 处理首位为“.” 3- 处理前两位为“0.”,此时首位为0,但是不能处理 4- 处理小数点不能重复输入 发现bug:12.3x6 = 如下图: xml <?xm ...

  5. 使用PD进行数据库建模时的问题

    在PowerDesigner中建立好概念模型后,将其转为物理模型的时候出现如下错误提示: 前面四个是相同的问题,原因是由于没有修改默认设置.可以在Tools--->Model Options-& ...

  6. keras系列︱迁移学习:利用InceptionV3进行fine-tuning及预测、完美案例(五)

    引自:http://blog.csdn.net/sinat_26917383/article/details/72982230 之前在博客<keras系列︱图像多分类训练与利用bottlenec ...

  7. react学习资源

    http://www.ruanyifeng.com/blog/2015/03/react.html http://www.ruanyifeng.com/blog/2015/02/future-of-d ...

  8. JProfiler远程监控Linux上Tomcat的安装过程细讲(步骤非常详细!!!)

    JProfiler远程监控Linux上Tomcat的安装过程细讲(步骤非常详细!!!) 1.文件准备: 服务器:CentOS Linux release 7.3.1611 (Core)     Apa ...

  9. 多线程二:线程池(ThreadPool)

    在上一篇中我们讲解了多线程的一些基本概念,并举了一些例子,在本章中我们将会讲解线程池:ThreadPool. 在开始讲解ThreadPool之前,我们先用下面的例子来回顾一下以前讲过的Thread. ...

  10. PHP经纬度 测距

    /** *求两个已知经纬度之间的距离,单位为米 *@param lng1,lng2 经度 *@param lat1,lat2 纬度 *@return float 距离,单位米 **/ function ...