欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android Apk发布时需要注意的事项

程序员文章站 2022-05-30 21:44:27
...

我们在开发Android App时,会签名打包Apk,然后上传到市场。在这个过程中,必然会有一些值得留意的安全性问题来让我们避免自己的App里的关键信息泄露。

1、API安全性

现在不管是XX云还是XX云,都提供了443端口以及免费证书的签发,即便没有使用他们的证书,也可以使用Let's Encrypt来为我们签发一个域名对应的数字证书,作为TLS加密用证书,因此我们可以方便的升级接口为HTTPS,并且适当的在应用内增加伪造证书验证,以便于防止mitm攻击。

 

2、增加v2签名支持

v1签名已经爆出了随意更改apk包而可以继续通过v1签名验证的漏洞,这个漏洞存在一定的危险性。因此发包时我们可以考虑上Play市场时使用v1+v2混合签名,不推荐只使用v2签发apk,因为v2只能支持Android 7.0以及以上的设备。

国内市场可以考虑只发布v1签名,毕竟国内设备存在这样那样的深度定制系统,带有v2签名的设备可能存在安装不上的问题,为了对定制系统的兼容,对这个不大不小的安全性妥协置之了。

另外,开发调试时可以考虑只用v1签名。v2签名有一定概率会导致Instant Run失败,降低开发效率,因此在debug的buildType时推荐只用v1模式。

推荐显式的开启关闭v2签名描述

signingConfigs {
      release {
        storeFile file("myreleasekey.keystore")
        storePassword "password"
        keyAlias "MyReleaseKey"
        keyPassword "password"
        v2SigningEnabled false
      }
    }

详见:https://developer.android.com/about/versions/nougat/android-7.0#apk_signature_v2

 

3、代码混淆

代码混淆不用说了,最基本的代码安全就是要为代码混淆打包。

但是值得注意的是,如果使用了ORM数据库或者类ORM的JSON/XML的序列化反序列化框架库,请将对象实体类避开混淆,关键组件包括四大组件和View的子类、Annotation子接口、以及JS接口类避开混淆。也就是说,任何会成为反射技术、Annotation、AnnotationProcessor(或APT)代码预处理技术有关的类,要内外兼去混淆。

 

4、关闭四大组件的不必要的导出(export)属性

除了有明示给其它应用可以跳转过来的界面,其它没有设计为可以被外部应用打开的软件一律将导出属性(export)设置为false,并且慎用intent-filter方式(隐式调用)四大组件,能不用则不用。

 

5、allowBackup属性

有文章说该属性一定要关闭,我们考虑的是,如果本地数据安全设计得当,或者本地数据存储为非敏感用户数据,是允许该值为true的,毕竟移机备份还是个具有相当意义的需求。

 

6、对外开放的组件访问推荐设置自定义权限

对于需要对外部开放组件访问的组件或者接口,可以考虑使用自定义权限来获得访问安全性。

https://developer.android.com/guide/topics/manifest/permission-element

 

7、密码的保存

密码不要明文保存到本地用户数据库或者键值库,如果需要,请设计一个强加密规则后存入本地库,或者设计Token和Expiration使用有期限令牌对用户数据获得读写权。

 

8、日志调试

推荐使用Logger等第三方日志库方便自己调试。但是也要注意,一定要给自己调用日志库加手动编译开关。而不是指望清单文件的debuggable属性为false时避开log的打印。由于市面上存在自定制ROM,并且是以userdebug模式附加了root和debug所有应用权限的手机,仍然会将所有log打印出来,因此仍然需要加独立开关。

 

9、webview安全

关闭对file uri的支持

 

10、各种**的保存

各种平台的**、AppSecret、AppKey,都要存在so库中,使用时通过JNI读取,或者通过RestfulAPI读取

 

11、未完待續