使Android应用真正安全的3件事

145 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 1 天,点击查看活动详情

使Android应用真正安全的3件事

随着移动设备成为我们进入数字和现实生活的大门, 应用开发人员必须非常认真地对待安全问题. 虽然一些Android开发者被认为或认为自己是前端开发者, 但实际上他们的作用更大, 我们有责任了解用户数据是如何传输, 存储和处理的, 以及我们如何保护这些数据.

在这里, 我们了解3件事情(不需要太多麻烦),以实现极大地提高你的应用程序的安全性. 包括数据库, SharedPreferences和网络.

SecureSharedPreferences是安全的SharedPreferences

AndroidX团队在几个月前发布了这个库, 它能成为一个标准是最好的了. 目前处于RC3阶段, 我们可以期待它很快发布.

我想, 我需要提供一个适当的免责声明, 因为它(还)不是一个已发布的, 可在生产环境使用的版本. 请以适当的谨慎态度行事, 比如, 你可能想检查你的公司政策.

如何使用

这个新的AndroidX库正在对SharedPreferences进行实时加密/解密. 它支持带有主密钥的AES256.

它与SharedPreference接口完全兼容, 这使得迁移非常容易.

缺点

鉴于小块的数据被保存在SharedPreferences中, 性能上的缺陷可以忽略不计.

用SQLCipher毫不费力地加密SQLite数据库

如果要在Room中存储任何数据, 就必须知道它没有加密. SQLCipher正在为SQLite添加安全层, 而不会危及您的应用程序架构.

如何使用

SQL请求和DAO保持不变. 我们可以继续像往常一样使用Room, 对开发人员来说, 它是完全透明的. SQLCipher正在实现一个加密层来动态加密/解密数据. 它支持带有主密钥的AAES256.

缺点

性能可能会受到轻微影响, 但是并不十分明显, 除非你正在处理大量的数据. SQLCipher提供一个工具来了解它的性能如何. 也推荐你阅读这篇短文, 它给出了一些关于SQLCipher的见解.

通过OkHTTP/Retrofit实现SSLPinning

现在, 我们存储和处理的数据是安全的, 让我们看看我们可以对交换的数据做什么. 一个非常常见的攻击是中间人, 它基本上由一个攻击者组成, 攻击者在用户没有注意到的情况下拦截网络流量.

我假设你已经使用HTTPS来与你的服务器交换数据. 如果不是这样的话, 请从这里开始!

如何使用

SSL Pinning的概念是确保与你通信的服务器是真实的. SSL证书有一个哈希值, 如SHA1, SHA256, 这是证书的一个指纹.

通过SSL Pinning, 我们要验证与我们通信的证书的指纹是我们期望的指纹.

这可以通过OkHTTP的CertificatePinner来实现. 它允许你设置你想支持的证书PIN.

缺点

验证是非常快的, 因为它基本上是比较两个字符串. 然而, 请注意, 证书在某些时候会过期(以及与之相关的SHA256), 因此, 请确保你及时向CertificatePinner提供新的指纹, 这样你的应用程序就不会停止工作.

总结

我们有3种方式来改善应用的安全和用户的数据. 同时, 每一种方式都可以以非常合理的时间内实现, 所以我们没有理由不这么做.

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 1 天,点击查看活动详情