资讯专栏INFORMATION COLUMN

Android项目安全注意事项和解决方案

WalkerXu / 1927人阅读

摘要:还有就是项目发布后项目中一些数据安全,等方面,都值得我们考虑,思索。官方文档安全说明及其以上系统提供了为应用程序数据的备份和恢复功能,此功能的开关决定于该应用程序中文件中的属性值,其属性值默认是。解决方案自己进行数据加密。

在个人和公司开发的项目发布后,作为软件工程师最担心的就是代码安全(虽说现今而言,技术已没有什么秘密,聪明人很多,你的功能可能别人稍加研究就能不看代码也能实现(黑科技除外),但实现归实现,实现的方案,思路,性能这些是别人无法复制的)。
还有就是项目发布后项目中一些数据安全,等方面,都值得我们考虑,思索。

1. AndroidManifest

AndroidManifest中的android:allowBackup属性,默认为true,如无特殊情况,可以改为false,防止数据被备份。

官方文档 安全说明

Android API Level
8及其以上Android系统提供了为应用程序数据的备份和恢复功能,此功能的开关决定于该应用程序中AndroidManifest.xml文件中的allowBackup属性值[1]
,其属性值默认是True。当allowBackup标志为true时,用户即可通过adb backup和adb
restore来进行对应用数据的备份和恢复,这可能会带来一定的安全风险。

Android属性allowBackup安全风险源于adb backup容许任何一个能够打开USB
调试开关的人从Android手机中复制应用数据到外设,一旦应用数据被备份之后,所有应用数据都可被用户读取;adb
restore容许用户指定一个恢复的数据来源(即备份的应用数据)来恢复应用程序数据的创建。因此,当一个应用数据被备份之后,用户即可在其他Android手机或模拟器上安装同一个应用,以及通过恢复该备份的应用数据到该设备上,在该设备上打开该应用即可恢复到被备份的应用程序的状态。

尤其是通讯录应用,一旦应用程序支持备份和恢复功能,攻击者即可通过adb backup和adb
restore进行恢复新安装的同一个应用来查看聊天记录等信息;对于支付金融类应用,攻击者可通过此来进行恶意支付、盗取存款等;因此为了安全起见,开发者务必将allowBackup标志值设置为false来关闭应用程序的备份和恢复功能,以免造成信息泄露和财产损失。

2. 防截屏

在登录和注册,或修改密码等敏感数据操作时,如果手机中有后台默认隐藏截屏的应用,在输入是一直截屏,就有可能盗取敏感数据信息。

解决方案:

在Activity onCreate 中加入:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
3. 本地数据加密

开发过程中少不了通过 android.content.SharedPreferences 进行一些数据和变量存储,但是这些数据很容易被读取到,所以需要应对数据进行加密处理。

解决方案:

自己进行数据加密。

通过第三方进行加密,在此推荐:Hawk

4. 隐藏日志

如果开发项目搭建之初就对项目整体考虑周到了,我觉得这点应该不用,但是如果项目框架搭建之初没进行此方面的考虑,就得自行处理了,具体方案如下:

先在当前Module下的build.gradle中的buildTypes方法中代码至如下(之前自己的配置代码不变):

buildTypes {
    release {
        buildConfigField "boolean", "LOG_DEBUG", "false"
        
        proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro"
    }
}

然后在proguard-rules.pro文件中加入:

-assumenosideeffects class android.util.Log{
    public static boolean isLoggable(java.lang.String, int);
    public static int v(...);
    public static int i(...);
    public static int w(...);
    public static int d(...);
    public static int e(...);
}

至此,可以完全隐藏android.util.Log的所有日志。

5. 混淆

先在当前Module下的build.gradle中的buildTypes方法中修改代码至如下(之前自己的配置代码不变):

buildTypes {
    release {
        minifyEnabled true
    }
}

然后再在proguard-rules.pro文件中加入引用的jar、library等进行排除操作。

在此推荐一个Android Studio插件,免去自己一个一个添加的麻烦:AndroidProguardPlugin 一键生成项目混淆代码插件(此插件还在继续完善中,如有没有添加的库,可以直接联系插件开发者进行添加)

以上是总结的一些安全方面的方案,希望有用,当然,代码方面还可以进行项目加壳处理,进一步进行安全保护,具体加壳可以利用一些第三方平台等,这里不一一列举,自行Baidu,Google。

by anonymous (感谢赵同学整理)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/11201.html

相关文章

  • 金三银四,2019大厂Android高级工程师面试题整理

    摘要:原文地址游客前言金三银四,很多同学心里大概都准备着年后找工作或者跳槽。最近有很多同学都在交流群里求大厂面试题。 最近整理了一波面试题,包括安卓JAVA方面的,目前大厂还是以安卓源码,算法,以及数据结构为主,有一些中小型公司也会问到混合开发的知识,至于我为什么倾向于混合开发,我的一句话就是走上编程之路,将来你要学不仅仅是这些,丰富自己方能与世接轨,做好全栈的装备。 原文地址:游客kutd...

    tracymac7 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<