在 BuildConfig 中隐藏 api 密钥安全吗?
hiding api key in BuildConfig is safe?
我像大多数人推荐的那样将API Key写在local.properties文件中,然后使用com.google.android.libraries.mapsplatform.secrets
将其保存在BuildConfig中,以便在代码中引用。
而我在Google控制台查看的时候,得到了一个错误提示,说在扩展Application的class中引用BuildConfig得到的aws key不适合security。
该消息指的是引用 BuildConfig 的行以及 Class。
收到报错信息后,我用proguard进行了混淆,指向该行的错误消失了,但是指向class本身的错误仍然存在。
这是错误信息
(1) Amazon Web Services credentials may be exposed
Your Amazon Web Services credentials may be exposed.
This exposure of your credentials
could lead to unauthorized access to your AWS account, which may
include associated excessive charges, and potentially unauthorized
access to your data and your users' data.
(2) Leaked AWS credentials Your app contains Exposed Amazon Web
Services Credentials.
Vulnerable classes:
com.{myPackage}.GlobalApplication
sv:deadline:05/23/2022
我该怎么办?
BuildConfig
class 实际上是您 APK 中的纯文本。
最安全的方式(据我所知)是远程存储它(随意使用您想要的任何服务),然后在运行时获取密钥。
您可以使用 Android Crypto library 加密缓存它,而随机加密密钥安全地存储在 AndroidKeyStore
。
在获取 API 密钥之前,验证:
- 您的应用未被调试(据我所知,一些
isDebbuging
函数或 isDebbuged
)。
- 您的应用程序未通过验证用于为您的应用程序签名的证书的哈希值重新打包。
这些是我能想到的基本安全措施,还有更多方法可以加强您的应用和访问。
尽管这不是您的情况,但值得一提的是,有时为了使代码更简单,您有意同意将 API 密钥保存为纯文本。
这适用于您知道并接受窃取 API 密钥的代价的情况 - 大多数情况下 API 不能用于获取敏感数据。
我像大多数人推荐的那样将API Key写在local.properties文件中,然后使用com.google.android.libraries.mapsplatform.secrets
将其保存在BuildConfig中,以便在代码中引用。
而我在Google控制台查看的时候,得到了一个错误提示,说在扩展Application的class中引用BuildConfig得到的aws key不适合security。
该消息指的是引用 BuildConfig 的行以及 Class。
收到报错信息后,我用proguard进行了混淆,指向该行的错误消失了,但是指向class本身的错误仍然存在。
这是错误信息
(1) Amazon Web Services credentials may be exposed
Your Amazon Web Services credentials may be exposed.
This exposure of your credentials could lead to unauthorized access to your AWS account, which may include associated excessive charges, and potentially unauthorized access to your data and your users' data.
(2) Leaked AWS credentials Your app contains Exposed Amazon Web Services Credentials.
Vulnerable classes:
com.{myPackage}.GlobalApplication
sv:deadline:05/23/2022
我该怎么办?
BuildConfig
class 实际上是您 APK 中的纯文本。
最安全的方式(据我所知)是远程存储它(随意使用您想要的任何服务),然后在运行时获取密钥。
您可以使用 Android Crypto library 加密缓存它,而随机加密密钥安全地存储在 AndroidKeyStore
。
在获取 API 密钥之前,验证:
- 您的应用未被调试(据我所知,一些
isDebbuging
函数或isDebbuged
)。 - 您的应用程序未通过验证用于为您的应用程序签名的证书的哈希值重新打包。
这些是我能想到的基本安全措施,还有更多方法可以加强您的应用和访问。
尽管这不是您的情况,但值得一提的是,有时为了使代码更简单,您有意同意将 API 密钥保存为纯文本。 这适用于您知道并接受窃取 API 密钥的代价的情况 - 大多数情况下 API 不能用于获取敏感数据。