热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android安全实践

一.概况 之前在app中并未涉及支付,敏感信息等相关功能的模块,所以对于安全这块的话并没有进行十分严格的控制。但是随着检查的一步步变的严格,各种检验报告接踵而
一.概况

之前在app中并未涉及支付,敏感信息等相关功能的模块,所以对于安全这块的话并没有进行十分严格的控制。但是随着检查的一步步变的严格,各种检验报告接踵而至,“不安全”你们的app,马上改,不改立马下架(公司为某央企媒体类,检查委托机构是公安部,被委托检查机构好几个出了好几份报告)。
所以总结一下,为以后开发或者设计产品时候提供安全规范。

二.安全问题分类

下面涉及的安全问题均来自于我们的app的安全检测报告,具有实际参考价值。可能不够全面但是囊获了大部分的安全问题

2.1apk包自身安全问题


apk破解问题

app包的破解反编译问题是最危险也是最基础的问题。细分的话有:
Activity劫持问题(伪造登录页面,支付页面)也就是钓鱼页面问题;
app被重新打包动态调试问题;
广告插入风险;
防二次打包;

本地存储信息安全问题

app本地存储文件涉及敏感信息的要做加密处理。例如,file,sharepreference,Sqlite等;存储数据包含用户名,密码,支付相关信息等等。

2.2网络传输数据安全问题

首先,传输协议安全问题。其次,敏感信息(密码,支付相关信息等)拦截安全问题。

2.3后台接口安全问题


后台接口爆破问题

登录接口未做错误次数限制等。

短信接口存在滥用风险

短信接口存在缺陷,攻击者可滥用此接口进行短信轰炸。
后端可添加重试次数以及IP地址等限制。
安全问题不可能百分之百的得到解决,从理论上是不可能的。但是破解方也会从利益的角度来考虑破解或者叫攻击一个app或者网站是不是值得,如果花的力气比得到的利益多我感觉即使得手了也是赔本的,这些人不会做这样的事情。所以只要我们把安全问题中的绝大部分问题解决了或者加大破解攻击难度,我们的app安全就能得到保证。下面是上面问题的解决方案,注意随着时间的推移攻防两端都在进步那么解决方案也会不断的优化,所以我们也要不断关注安全技术的迭代。

三.apk包自身安全问题解决

apk包的防止反编译和防止被二次打包是最基础和最有效的防止安全问题产生的方式。代码的泄漏,动态调试,广告的植入,钓鱼页面等问题都能基本上得到解决。
相应的方案就是:
1.代码混淆
2.使用比较靠谱的第三方加固工具,例如360,百度,腾讯,爱加密等等。具体的使用方法去相应的官网看文档就行了,会比较容易,因为是提供服务的难了没人用。这里不展开介绍各个平台的具体流程因为它们会不断迭代,相应的处理方法等可能会有变化,所以只要去它们官网查看最新的使用方法就好了。

3.1 代码混淆

在AndroidStudio中实现代码压缩和混淆,通过Gradle构建工具来实现。由于Gradle的强大我们可以实现对“不同情况”采取不同的混淆策略。而真正起作用的工具是ProGuard,下面介绍概念和使用方法。

3.1.1 ProGuard 的介绍

ProGuard :非常重要的一个工具主要提供了两个功能,一个是“代码压缩”;另一个是“代码的混淆”。关于其作用的介绍在官网的说明如下:
这里写图片描述
同时奉上官网介绍Proguard链接

3.1.2 ProGuard的使用


3.1.2.1 在工程中app的build.gradle中设置如下:

android {
...省略代码...buildTypes {...省略代码...release {minifyEnabled trueproguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'}}...省略代码...
}

就两句话比较重要:

  • minifyEnabled true:开启“代码压缩”和“混淆”;
  • proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’:代码压缩和混淆的规则依据proguard-android.txt’文件和proguard-rules.pro文件;(前者是系统默认使用规则;后者是开发者自己设置的规则)

关于压缩和混淆规则的两个文件的解释:

1.proguard-android.txt文件是默认的压缩和混淆规则设置文件;同时要想做进一步的代码压缩,请尝试使用位于同一位置的 proguard-android-optimize.txt 文件。它包括相同的 ProGuard 规则,但还包括其他在字节码一级(方法内和方法间)执行分析的优化,以进一步减小 APK 大小和帮助提高其运行速度。
2.proguard-rules.pro 文件用于添加自定义 ProGuard 规则。默认情况下,该文件位于模块根目录(build.gradle 文件旁)。
官方的说法如下:
这里写图片描述

不同的渠道包添加更多不同的压缩和混淆策略

想让每个渠道中添加各自渠道特有的压缩和混淆策略,也就是拥有“默认的”和“统一自定义的”和“各个渠道独有的”三种压缩和混淆策略的并集。
在相应的 productFlavor 代码块中再添加一个 proguardFiles 属性。如下面是我的要打包的各个渠道:

productFlavors {...省略代码...Umeng {proguardFile 'umeng-rules.pro'}wandoujia {proguardFile 'wandoujia-rules.pro'}...省略代码...
}

umeng-rules.pro和wandoujia-rules.pro是我们创建的各个渠道对应的规则文件,存放在和proguard-rules.pro相同的文件夹中。如下图
这里写图片描述

3.1.2.2 混淆文件的编写

我们在开发过程中绝大部分情况下,只需要编写proguard-rules.pro文件就可以了。因为想要对不同渠道包应用压缩混淆策略的情况极少

混淆文件做了什么?声明我们想要保留的类,方法。

一旦minifyEnabled true了那么就开启了代码压缩和混淆。那么就面临两种问题的出现,如下
1.系统误认为没有用到类,方法等直接被删除了;
2.系统认为用到了,但是进行了混淆处理(将包名,类名,方法名变成了单个字母);
为了解决上面的问题混淆文件配置就应运而生。文件中配置的内容就是解决上面的问题:声明我们想要保留的类,方法。

错误标记产生的原因

对于某些情况,默认 ProGuard 配置文件 (proguard-android.txt) 足以满足需要,ProGuard 会移除所有(并且只会移除)未使用的代码。不过,ProGuard 难以对许多情况进行正确分析,可能会移除应用真正需要的代码。举例来说,它可能错误移除代码的情况包括:
当应用引用的类只来自 AndroidManifest.xml 文件时
当应用调用的方法来自 Java 原生接口 (JNI) 时
当应用在运行时(例如使用反射或自检)操作代码时

哪些类,方法不能被去掉或是不能混淆?

四.本地存储信息安全问题

由于一些信息要存储在手机本地,那么相应的敏感信息就要进行加密处理,不然很容易泄漏出去。
##数据加密选择
###4.1File或SharePreference缓存加密
如果app有本地缓存功能并且缓存的内容比较重要,那么就要对缓存内容加密。一般我们使用file或者sharepreference进行Json的缓存,对于想要加密的Json进行相应的加密就行了。这里我们可以全部加密,也可以有选择的加密(例如我之前的公司是做保险类CRM类型app的里面好多的用户信息和工作人员信息,我们用的全部加密方式)。
关于使用什么加密方案,我推荐对称加密,因为非对称在一端也没什么用。我们可以选择比较好的3DES。

4.1Sqlite加密

当我们的数据以数据库的形式存在本地的话,我们就要对它进行数据库加密了。使用Android原生的数据库有自己的加密方法,如果使用的第三方的那么就要去相应的加密方法。

五.网络传输数据安全问题

5.1使用Https

为了保障数据的安全传输使用Https是必须的,当然大部分情况下我们只是验证了服务端的合法性,如果想更加安全,验证客户端也是必要的。

5.2对敏感信息进行加密

当我们要注册或者登陆或者修改用户信息等功能的时候加密是很有必要的。还有就是支付类的信息加密更是必要的了,当然还有其他情况只要信息比较重要那么加密是必须的。
#六.后台接口安全问题
本来这些问题是后台的问题,这里涉及网站安全等,这里不做展开。只是对本次安全检测的一些问题进行一下说明。客户端要做的就是提示用户。

6.1后台接口爆破问题

登录接口未做错误次数限制。

6.2短信接口存在滥用风险

短信接口可能存在缺陷,攻击者可滥用此接口进行短信轰炸。
后端可添加重试次数以及IP地址等限制。


推荐阅读
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
author-avatar
濮阳土著_480
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有