【问题标题】:Secure flutter application with firebase anonymous user使用 firebase 匿名用户保护 Flutter 应用程序
【发布时间】:2020-11-14 12:16:40
【问题描述】:

我有一个应用程序连接到 Firebase 云存储来存储图像和 Firestore 来存储数据。我添加了一些安全规则,要求用户通过身份验证才能修改数据。我的应用程序不允许用户连接到 firebase,我使用了另一个服务,所以我在应用程序启动时进行了自动匿名 firebase 身份验证,以便用户可以使用该应用程序。我认为在 firebase(android) 控制台中输入的计算机的 SHA-1 密钥会阻止 android 应用程序在另一台机器上编译,从而保证匿名用户在我的应用程序上。但是,我可以毫无问题地在另一台计算机上构建和运行应用程序,就好像匿名允许那样?如何保护我的应用程序? 谢谢

【问题讨论】:

    标签: firebase flutter firebase-authentication


    【解决方案1】:

    我认为在 firebase(android) 控制台中输入计算机的 RSA 密钥会阻止 android 应用程序在另一台机器上编译,从而保证匿名用户在我的应用程序上。

    实际上并非如此。您不能限制 Firebase 身份验证在不同的设备或计算机上工作。底层 REST API 是公开的,可以从 Internet 上的任何地方调用。您在控制台中输入的 SHA-1 密钥旨在识别您的应用,而不是硬件。

    【讨论】:

    • 我认为这是一种安全措施,在另一个应用程序上使用 firebase 电话身份验证,如果我用未注册的计算机编译应用程序,我会收到一条错误消息,告诉我我的计算机未经授权。谢谢
    • 他们将无法编译/发布代码,但他们可以使用来自应用程序的相同配置数据来调用 FIrebase API。有关之前讨论过的问题,请参阅我的答案中的第二个链接。
    【解决方案2】:

    Firebase 用于在服务器上查找您的项目的配置数据不是秘密(请参阅 here),任何人都可以从您的应用中获取这些数据,然后还可以使用这些数据对您的项目进行 API 调用。目前有一种方法可以确保对 API 的调用只能来自您的应用(请参阅here)。

    您应该做的是创建安全规则,以确保所有访问都得到授权,无论从何处调用 API。通过 Firebase 的服务器端安全规则执行此操作可确保任何人都无法绕过这些规则,即使是恶意用户也不行。

    假设您在 Firebase 存储中为每个用户提供了自己的文件夹。然后你可以use security rules to ensure each user can only read and write files in their own folder。有了这些安全规则,他们是否使用您的应用程序访问文件,或者他们是否使用您的项目密钥和他们自己的代码调用 API 都不再重要:因为访问由服务器端控制安全规则。

    【讨论】:

    • 感谢您的回答。问题是每个人都必须阅读图像,图像不是私有的,我需要规则是在写作上。我可以将创建时的图像与匿名用户相关联,以便只有他可以修改它们,但如果他断开连接并重新连接,他将无法再修改它们,因为他将使用另一个 ID 进行身份验证?
    • 如果图像需要公开可读,但只能由文件夹中指定的用户写入,那仍然是您在安全规则中控制的内容。如果匿名用户退出,他们将无法恢复相同的 UID。这是匿名的固有特性。如果您希望他们能够跨安装/设备重用相同的 UID,您应该使用允许这样做的其他提供商之一。
    猜你喜欢
    • 2023-01-17
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    • 2021-02-22
    • 2019-07-18
    相关资源
    最近更新 更多