Android 安全提示 笔记

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。

时间: 2024-10-31 21:21:39

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

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

Android:日常学习笔记(10)---使用LitePal操作数据库 引入LitePal 什么是LitePal LitePal是一款开源的Android数据库框架,采用了对象关系映射(ORM)的模式,将平时开发时最常用的一些数据库功能进行了封装,使得开发者不用编写一行SQL语句就可以完成各种建表.増删改查的操作.并且LitePal很"轻",jar包大小不到100k,而且近乎零配置,这一点和Hibernate这类的框架有很大区别.目前LitePal的源码已经托管到了GitHub上. 关

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

Android群英传笔记--第十二章:Android5.X 新特性详解,Material Design UI的新体验 第十一章为什么不写,因为我很早之前就已经写过了,有需要的可以去看 Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 这一章很多,但是很有趣,也是这书的最后一章知识点了,我现在还在考虑要不要写这个拼图和2048的案例,在此之前,我们先来玩玩Android5.X的新特性吧!

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

Android:日常学习笔记(8)---探究UI开发(2) 对话框 说明: 对话框是提示用户作出决定或输入额外信息的小窗口. 对话框不会填充屏幕,通常用于需要用户采取行动才能继续执行的模式事件. 提示: Dialog 类是对话框的基类,但您应该避免直接实例化 Dialog,而是使用下列子类之一: AlertDialog此对话框可显示标题.最多三个按钮.可选择项列表或自定义布局. DatePickerDialog 或 TimePickerDialog此对话框带有允许用户选择日期或时间的预定义 UI

android开发环境 eclipse + android sdk配置笔记

本开发环境为:eclipse + android sdk,步骤说明的顺序,没有特别要求,看个人爱好了 步骤说明: 1.安装eclipse 2.配置jdk 3.安装android sdk 4.安装ADT,关联eclipse和android 详细说明: 1.安装eclipse * 到官方网下载eclipse(http://www.eclipse.org/downloads/),我是下载的Eclipse IDE for Java EE Developers. * 正常解压安装,注意记得路径就可以了 2

java/android 设计模式学习笔记(16)---命令模式

这篇博客我们来介绍一下命令模式(Command Pattern),它是行为型设计模式之一.命令模式相对于其他的设计模式更为灵活多变,我们接触比较多的命令模式个例无非就是程序菜单命令,如在操作系统中,我们点击关机命令,系统就会执行一系列的操作,如先是暂停处理事件,保存系统的一些配置,然后结束程序进程,最后调用内核命令关闭计算机等,对于这一系列的命令,用户不用去管,用户只需点击系统的关机按钮即可完成如上一系列的命令.而我们的命令模式其实也与之相同,将一系列的方法调用封装,用户只需调用一个方法执行,那

疯狂Android讲义 - 学习笔记(八)

第10章 Service与BroadcastReceiver 10.1 Service简介 Service组件也是可执行的程序,有自己的生命周期,创建.配置Service与创建.配置Activity的过程基本相似.Service一直在后台运行,没有用户界面. 10.1.1 创建.配置Service 需要2个步骤:1 定义基础Service的子类,2 在AndroidManifest.xml文件中配置Service. Service与Activity都是从Context派生出来的,因此都可以调用C

【Android开发学习笔记】【第四课】基础控件的学习

通过一个简单的例子来学习下面几种控件: 1.TextView:简单的文本显示控件 2.EditText:可以编辑的文本框 3.Button:按钮 4.Menu:这里指的是系统的Menu 5.Toast:消息提示控件,类似于MFc的tip(不知道理解的对不对) 顺便用到上一次学习的多个Activity之间传递数据的技术,来做一个小的计算乘法的case 步骤: (1)主Activity 和显示结果的 Activity 都采用线性布局,下面是布局文件的源代码: <LinearLayout xmlns:

Android开发:《Gradle Recipes for Android》阅读笔记(翻译)2.2——将Eclipse开发的项目导入到AndroidStudio

问题: 你想要将一个Eclipse ADT项目导入到Android Studio中. 解决方案: Android Studio提供了一个导入向导,可以重写已有的项目. 详细: 在Android Studio的欢迎页上,显示导入eclipse或者gradle项目的向导按钮. 链接会打开导航让你选择已有Eclipse项目的文件地址.使用老的项目结构,res,src和AndroidManifest.xml都直接在根目录下.如: 选择好目标目录,导航提供了一个将jar包转化为gradle下的依赖,以及其

java/android 设计模式学习笔记(14)---外观模式

这篇博客来介绍外观模式(Facade Pattern),外观模式也称为门面模式,它在开发过程中运用频率非常高,尤其是第三方 SDK 基本很大概率都会使用外观模式.通过一个外观类使得整个子系统只有一个统一的高层的接口,这样能够降低用户的使用成本,也对用户屏蔽了很多实现细节.当然,在我们的开发过程中,外观模式也是我们封装 API 的常用手段,例如网络模块.ImageLoader 模块等.其实我们在开发过程中可能已经使用过很多次外观模式,只是没有从理论层面去了解它. 转载请注明出处:http://bl