【问题标题】:Best practice for storing Firestore data model存储 Firestore 数据模型的最佳实践
【发布时间】:2019-10-28 23:05:57
【问题描述】:

在使用 Firestore 和 Android 时,如果我们想将数据模型存储在一个地方,我们可以存储它:

在 XML 中:

<string name="collection_users">users</string>
<string name="user_first_name">first</string>
<string name="user_last_name">last</string>
<string name="user_year_birth">born</string>

或者直接用Java:

public static final String COLLECTION_USERS = "users";
public static final String FIELD_FIRST_NAME = "first";
public static final String FIELD_LAST_NAME = "last";
public static final String FIELD_YEAR_BIRTH = "born";

但是,在这两种情况下,我们都会在客户端代码中公开数据库的整个数据模型,从而使攻击者的工作更容易,以防他们以某种方式获得应用程序的源代码。在使用 Firestore 等 No-SQL 数据库时,是否有任何好的做法或建议的方法来最大限度地减少客户端代码中数据库结构的暴露?

【问题讨论】:

    标签: android database security google-cloud-firestore data-modeling


    【解决方案1】:

    在使用 Firestore 等 No-SQL 数据库时,是否有任何好的做法或建议的方法来最大限度地减少数据库结构的暴露?

    当然可以,使用 Firestore 安全规则,这样您就可以根据需要保护您的数据库。为此,我建议您阅读有关getting started with Cloud Firestore Security Rules 的官方文档。

    安全规则以简单但富有表现力的格式提供访问控制和数据验证。要构建基于用户和基于角色的访问系统以确保用户数据的安全,您需要将 Firebase Authentication 与 Cloud Firestore 安全规则结合使用。

    由于无法阻止公开数据库结构,因此集合/文档的名称应明确存在于您的代码中,以便您可以在引用中使用它们。但这不会成为问题,只要您正确保护您的数据库。您可以移动一些逻辑(如果可能)服务器端,将是一个不错的选择。

    如果需要,您也可以尝试将这些名称存储在本地数据库中并对其进行加密,但我认为这样做没有任何好处。您可以选择是否需要某种加密。

    【讨论】:

    • 感谢您的回答,Firestore 安全规则当然是必须的。我的问题是是否有办法避免在客户端代码中暴露数据模型
    • 您需要在代码中明确包含集合/文档的名称,以便您可以在引用中使用它们。但是,只要您正确保护数据库,这将不是问题。
    • 即使使用正确且经过深思熟虑的安全规则,不公开数据模型也有助于最大限度地降低数据泄露的可能性。此外,公开数据模型会详细公开应用程序的后端解决方案以及应用程序存储的内容。我从您的回答中得知,没有(简单的)方法可以做到这一点。
    • 我没有说没有办法,我只是说只要你正确使用安全规则,就不会出现问题。如果需要,您可以尝试将这些名称存储在本地数据库中并对其进行加密,但我认为这样做没有任何好处。您可以选择是否需要某种加密。
    • 我知道你没有,所以我把“easy”放在前面。加密不值得,我同意。不幸的是,为了不暴露那些不想显示或包含更敏感数据的数据模型部分,解决方案似乎是尽可能地转移到服务器端。对于 SQL 数据库,这通常不是问题,原因有很多。无论如何,再次感谢您的回答。
    猜你喜欢
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多