下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922
论坛 >移动开发 >技术贴:Android移动应用安全开发经验分享

技术贴:Android移动应用安全开发经验分享

起个名字你猜我叫啥发布于 2015-12-05 19:48查看:846回复:6

Android作为移动智能终端的主力军,拥有大量的应用开发人员,目前国内大约有230万移动应用开发人员,其中就有46.4%的人员开发安卓App。大多数开发人员安全意识薄弱,重功能轻安全。

在我们看来,要想提高软件系统的安全性,需从源头抓起,必须将安全特性融入到软件开发的整个生命周期之中,首先要加强软件用户和开发人员的基本安全意识,再提升开发人员的安全技能。

本次小编就从安卓APP几个最常见问题点来谈谈安全开发最佳实践。

认证和授权

认证是用来证明用户身份合法性的过程,授权是用来证明用户可以合法地做哪些事的过程,这两个过程一般是在服务器端执行的,但是有些APP出于性能提升或用户体验等原因,将其做在客户端完成,由此导致客户端绕过等问题。

最佳实践:

  • 在客户端做认证和授权是很难保证安全的,所以应该把认证和授权做在服务器端;

  • 尽可能避免在设备上存储用户名和密码,可以使用登录认证后获得的token进行鉴权(同时注意控制token的有效期)。

加密和解密

开发人员在移动应用中通常会对敏感数据进行加密处理,但是使用不当有可能让其保护强度削弱,甚至大打折扣,因此,正确的选择加解密算法显得非常重要。

最佳实践:

  • 在不需要还原用户明文密码的场景使用哈希算法,在需要还原用户明文密码的场景下使用对称加密算法,并且始终优先选择使用哈希算法;

  • 使用目前主流的安全加密算法,比如哈希算法可以使用sha256,对称加密算法可以使用AES128/256,不使用过时的不安全算法,比如RC4、RC5、MD5和SHA1。

  • 密文和密钥不要放在同一文件或同一目录内,应分开存放,在一些安全度要求高的情况下,密钥最好碎片化存储。

  • 密钥不可硬编码在代码里面

数据验证

移动应用往往通过数据的发送、接收和处理来完成一系列功能,通常情况下,处理的数据绝大部分都来源于外部(比如网络、内部或外部存储和用户输入等),对这些数据处理不当会导致各种各样的漏洞和风险,比代码执行和信息泄漏等等。

最佳实践:

  • 对所有外部数据进行数据验证,数据验证建议采用白名单的方式,即只允许指定的字符通过,其它字符一律过滤,同时验证数据的长度和类型等。

  • 使用参数化查询语句防止SQL注入。

  • 使用WebViews时,将JavaScript和插件支持特性关掉,如果一定要打开该特性,需要对输出的内容进行html转义。

  • 设置禁止WebViews对文件系统进行存取,以防止文件包含漏洞。

  • 在activity内使用Intent Filter对action和data进行过滤。

应用加固

通常一个应用发布后可能会面临以下风险:(1)应用被别人解包植入广告或恶意代码再重打包发布;(2)应用的核心关键代码逻辑被逆向。因此,有必要在技术层面采取一定的缓解措施。

   最佳实践:

  • 可以使用proguard对Java源码进行混淆,对抗反编译。

  • 对Native代码进行加壳,对抗反汇编。

  • 应用程序加入动态反调试方法。例如,预先在AndroidManifest.xml文件插入android:debuggable=”false”,在程序中判断该标志位是否被篡改,此外,android SDK也提供了相关方法来检测调试器是否已连接,可在程序中随机插入检测。

  • 应用程序加入防二次打包的方法。应用程序被篡改并重打包时必定要重新签名,签名值和原开发者的必定不一样(不考虑证书丢失的情况),另外,重新编译程序classes.dex文件肯定会变,因此可在程序运行时对比签名或CRC值的方法对抗重打包。

安全配置

安全开发可以大大降低移动应用的安全风险,同样地,安全的配置可以让风险降到最低。

最佳实践:

  • 确保使用的第三方组件是从官方下载的,并且是最新版本的。

  • 为应用程序申请最小的权限,如果用不上就不要申请。

  • 应用和补丁在发布前建议进行病毒和恶意代码检测。

  • 为敏感数据输入界面提供防截屏措施,对抗木马。

其他事项

关键性业务逻辑代码应放在native代码实现,除此以外,尽量使用android SDK做开发,减少对native代码的依赖(native代码一般采用C/C++编写,容易出现缓冲区溢出等漏洞)

 

收藏(0)0
查看评分情况

全部评分

此主贴暂时没有点赞评分

总计:0

回复分享

共有6条评论

  • MK
  • 药师
  • 慧星的那一夜
  • Mr ken
  • YUI
  • cappuccino
  • mr jack
  • IT宅男
  • 课课家技术团队1
  • 选择版块:

  • 标题:

  • 内容

  • 验证码:

  • 标题:

  • 内容

  • 选择版块:

移动帖子x

移动到: