在使用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";
但是,在两种情况下,我们都会在客户端代码中公开数据库的整个数据模型,从而使攻击者的工作更加轻松,以防万一他们以某种方式掌握了应用程序的源代码。当使用NoSQL数据库(例如Firestore)时,是否有任何良好的实践或建议的方法来最大程度地减少数据库在客户端代码中的暴露?
答案 0 :(得分:2)
在使用诸如Firestore之类的No-SQL数据库时,是否存在任何最佳实践或建议的方法来最大程度地减少数据库结构的暴露?
可以,请使用Firestore安全规则,以便您可以根据需要保护数据库。为此,我建议您阅读有关getting started with Cloud Firestore Security Rules的官方文档。
安全规则以简单但具有表现力的格式提供访问控制和数据验证。要构建可确保用户数据安全的基于用户和基于角色的访问系统,您需要将Firebase Authentication与Cloud Firestore安全规则结合使用。
由于无法防止暴露数据库结构,因此在代码中应该明确存在集合/文档的名称,以便可以在引用中使用它们。但是,只要您正确保护数据库,就不会有问题。您可以在服务器端移动一些逻辑(如果可能),将是一个不错的选择。
如果需要,还可以尝试将这些名称存储在本地数据库中并对其进行加密,但是我认为这样做没有任何好处。由您决定是否需要某种加密。