首页 > 代码库 > Android 安全提示 笔记
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。
Android 安全提示 笔记