当前位置: 首页 > 工具软件 > apk-mitm > 使用案例 >

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

范云
2023-12-01

我们在开发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、未完待續

 

 类似资料: