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. docker打开api remote接口设置

    前言  本文记录docker怎么打开api remote接口设置,docker的版本更新太快了,不同的版本之间,设置可能不同,本文是针对docker13.1 1. 查看配置文件位于哪里 systemc ...

  2. IIS时间格式设置

    IIS时间格式调整: (已解决)今天在用IIS7的时候发现一个关于时间格式的问题,当我在ASP中使用now()时间函数的时候,日期是以“/”来分隔,而不是以“-”来分隔的,使得我在运行程序的时候老出错 ...

  3. CentOS6.3升级Python到2.7.3版本

    http://www.zhangchun.org/the-centos6-3-upgrade-python-to-2-7-3-version/ 查看python的版本 1 python  -V  2 ...

  4. nginx中的break与last指令区别

    很多人资料说,last与break的区别在于,last并不会停止对下面location的匹配.我理解上模模糊糊.今天自己来测验了一下. rewrite 指令末尾的break应该与单独写break作用是 ...

  5. 测试word发表博客

    哈哈哈 我测试一下 <ul class="clearfix"> <li> <div><img src="{IMG_PATH}qr ...

  6. FreeRDP的安装配置(错误信息:SSL_read: Failure in SSL library (protocol error?))

    最新文章:Virson's Blog 使用xfreerdp [serveripaddress]命令,连接xp/windows 2003都正常,但是在连接win7/2008时总是出错: ;------- ...

  7. Android Http 与断点续传

    HttpURLConnection conn = (HttpURLConnection) url.openConnection();                  conn.setRequestM ...

  8. java service domain dao 分层思路

    今天在开发项目的时候,对项目的java后台的分层有一些看法: 首先,鼓励使用service domain dao 层分层设计概念. 其次,对几层作用的理解: 第一:dao层操作单表,不涉及复杂逻辑,主 ...

  9. Prolog学习:基本概念

    上一篇对Prolog有了一个感性的认识,今天介绍下Prolog中一些基本概念,想要用Prolog解决一些实际问题之前必须要先了解它们.这些概念在<七周七语言>这本书中都有介绍,我简单提炼汇 ...

  10. MyBatis环境配置及入门

    Mybatis 开发环境搭建,选择: MyEclipse8.5 版本,mysql 5.5, jdk 1.8, mybatis3.2.3.jar 包.这些软件工具均可以到各自的官方网站上下载. 整个过程 ...