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. composer概念学习

    composer的中文文档地址 Composer是什么 Composer 是 PHP 的一个依赖管理工具.它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们. Composer 不是一个包管 ...

  2. 几种经典的Hash算法的实现(源代码)

    来源声明: http://blog.minidx.com/2008/01/27/446.html 先保存下来,以备后面研究,现在还看不懂! 哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这 ...

  3. 【Android】Android6.0发送短信Demo

    整理一下使用SmsManager类发送短信的方法. https://developer.android.com/reference/android/telephony/SmsManager.html ...

  4. mosquitto简单应用

    1. 简述 一款实现了消息推送协议 MQTT v3.1 的开源消息代理软件,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,比如现在应用广泛的低功耗传感器,手机 ...

  5. window.print()局部打印三种方式

    首先准备要打印的内容,也可以打印时再填充,html中定义如下: <!--startprint--> <div id="printcontent" style=&q ...

  6. 【oneday_onepage】——How to stretch the life of your SSD storage

    How to stretch the life of your SSD storage July 18, 2013, 9:06 PM — Once a PC enthusiast's dream st ...

  7. Web服务端开发需要考虑的问题(续)

    方案汇总API设计应用架构代码库管理工具链工作计划目标预期关键过程service-driver接口定义及实现web样例 方案汇总 API设计 基于https. 只提供纯数据. 基于一开始提出的rest ...

  8. android 编译错误 Error:(1, 0) Plugin with id 'com.android.application' not found.

    在导入一个项目时,由于它本身的gradle版本比较高,你试用比较旧版本的gradle时就报出Plugin with id 'com.android.application' not found.的错误 ...

  9. 小米3移动版 分区 调整/合并教程(16GB/64GB)

    (必读)版权声明:米3移动版TWRP Recovery为XueferH适配,分区脚本以及双数据置换脚本的知识产权,智力成果权归XueferH所有. 注:此教程仅适用于Xiaomi MI 3-移动版(1 ...

  10. 关于Unity中鼠标选取物体的解决方案

    今天修改了之前写的飞机大战的代码,原来的不足之处是点击屏幕的任意一点都可以移动飞机,也就是没有检测鼠标到底有没有点到飞机上. 我先是用之前的3D拾取技术,发现没有反应,才意识到我这个plane飞机节点 ...