当前位置: 首页 > 知识库问答 >
问题:

是谷歌服务。json安全不受黑客攻击?

连正信
2023-03-14

如果黑客反编译了我的APK,他能从这个文件中看到我的API密钥吗?我不担心我的源代码存储库。我只是担心黑客能从我的APK上看到这个API密钥。我试图加密这个文件,并在运行时解密它,但有一些问题

共有3个答案

公西翼
2023-03-14

应用程序中的所有内容都可以以一种非常简单的方式读取,因此正如谷歌建议的那样,你必须避免将信息放入apk中,尤其是在firebase/Google云消息或此类服务的情况下。。

闻人嘉颖
2023-03-14

根据Firebase文档:

将应用连接到Firebase项目时,Firebase控制台会提供直接添加到本地项目中的Firebase配置文件(Android/iOS)或配置对象(Web)。

>

  • 对于iOS,添加GoogleService-Info.plist配置文件

    对于Android,你可以添加一个谷歌服务。json配置文件

    Firebase配置文件或配置对象将应用程序与Firebase项目及其资源(数据库、存储桶等)关联。

    然后它将内容标识为公共内容:

    这些内容被视为公共内容,包括特定于平台的ID(在Firebase控制台设置工作流中输入)和特定于Firebase项目的值,如API密钥、实时数据库URL和存储桶名称。

    请记住,如果您使用实时数据库、云Firestore或云存储,您仍然需要遵循Firebase描述的安全指南。

    还要注意,尽管这些文件对您的应用程序是公共的,但不应该在开源项目的公共存储库中提供。

  • 蒯安平
    2023-03-14

    按照谷歌插件的设置方式,你很难隐藏谷歌服务的内容。json文件。唯一可行的方法是重新实现插件已经为你做的事情,我不推荐这样做。不幸的是,当你按照谷歌希望的方式使用这个插件时,任何人都很容易解压你的APK来获取你的Firebase/Google API密钥。

    但是,通过配置谁可以使用该API密钥,可以防止滥用该API密钥。对于Android应用程序,您可以指定API密钥只能由已由给定密钥库签名并使用给定包名的Android应用程序使用。

    要配置这些限制,请按照以下文档操作:https://cloud.google.com/docs/authentication/api-keys#api_key_restrictions

    除了限制API密钥外,如果使用Firebase RTD/Firestore,还应确保在数据存储上配置安全规则。根据您的用例,您可以防止匿名用户在数据库的部分中读写。

    如果你想要更多的细节,这里有一篇关于如何在Android应用程序中保护你的API密钥的好文章:https://proandroiddev.com/developing-secure-android-apps-8edad978d8ba

     类似资料:
    • 我想增加我的网络应用程序的安全,以防受到攻击。以下组件存在于我的系统中: Azure Web App Azure Blob存储 Azure SQL Azure Azure密钥库

    • 我正在构建一个专门使用JSON作为请求和响应内容的网络服务(即,没有表单编码的有效载荷)。 如果以下情况属实,web服务是否容易受到CSRF攻击? > 任何没有顶级JSON对象的POST请求,例如,,将被400拒绝。例如,内容为的请求将因此被拒绝。 任何具有以外的内容类型的请求将被400拒绝。例如,具有内容类型的请求将因此被拒绝。 所有GET请求都是安全的,因此不会修改任何服务器端数据。 客户端通

    • 在安全和身份验证策略方面,我完全是个笨蛋。所以我阅读了这篇关于“基于令牌的身份验证”的文章:https://scotch.io/tutorials/the-ins-and-out-of-token-based-authentication > 我不明白为什么中间人(或黑客)不能看到客户端发送的令牌,并使用令牌冒充该客户端/个人来检索资源?在这种意义上,什么使基于JSON Web令牌/OAuth2的

    • 我为小客户网站运行了一个VPS,有几十个WordPress安装。

    • 这样效率高吗?我发现这确实比(int I...代码的标准

    • 回答在这里。 我的应用程序中有不止一种风格,我想使用相同的谷歌服务。json对于所有这些,所以我考虑将属性package_name的值设置为正则表达式,并在我的构建中使用任务替换它。gradle(应用程序模块)。 我的口味是这样定义的: 我的想法是: 问题是我不知道如何访问PackageName(代码中的myPackageName),或者是否可能。 也许我必须使用另一个任务,而不是在构建之前运行,