【问题标题】:Firestore Security Rules Without User Authentication没有用户身份验证的 Firestore 安全规则
【发布时间】:2021-07-05 14:19:09
【问题描述】:

我有一个简单的加密货币应用程序,它使用 API 来获取价格。我正在使用 Firestore 存储我的 API 密钥,并且我的应用在启动时从 Firestore 检索我的 API 密钥。我的 API 密钥是我的 Firestore 中唯一的数据。由于我的应用程序不允许用户创建配置文件/帐户,因此我的规则中不包含用户身份验证。我的 Firestore 安全规则是:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /Data/{Data} {
      allow read: if true;
    }
  }
}

是否有更好的安全规则来提高安全性或者这些规则是否足够好?

编辑

下面的“url-builder.dart”文件是我从 Firestore 检索我的 API 密钥的方式。然后我将我的 API 密钥插入到最后的 URL 中。

import 'package:cloud_firestore/cloud_firestore.dart';

class URLBuilder {
  URLBuilder(this.cryptoCurrency, this.currency, this.periodValue);

  String cryptoCurrency;
  String currency;
  String periodValue;

  String _pricesAndTimesURL;
  String get pricesAndTimesURL => _pricesAndTimesURL;

  Future<String> getApiKey() async {
    return FirebaseFirestore.instance
        .collection("Data")
        .doc("APIKeyDocument")
        .get()
        .then((value) {
      return value.data()["Key"];
    });
  }

  Future<void> buildURL() async {
    String apiKey = await getApiKey();
    _pricesAndTimesURL =
        'https:$urlStart/markets/kraken/$cryptoCurrency$currency/ohlc?periods=$periodValue&apikey=$apiKey';
  }
}

【问题讨论】:

    标签: flutter google-cloud-firestore firebase-security


    【解决方案1】:

    为了获得最佳安全性,请将您的安全规则视为应用程序逻辑的一部分,与应用程序代码处于同一级别。这意味着您的规则应该只允许您的应用程序代码需要的确切用法。

    由于您没有分享相关代码,我将在下面做一些假设和一般性建议。

    如果您的代码确实 get() 调用了 Data 集合中的所有文档,那么您当前的规则就是一个很好的代理。但是,例如,如果您的代码仅访问该集合中的单个文档,则这将是更接近的等价物:

    allow get: if true;
    

    这意味着代码可以获取单个文档,但无法获取集合中的所有文档。

    如果您的代码仅访问特定文档,您可以进一步收紧规则,只允许它们读取文档,并进一步生成您现在可能在Data 集合中拥有的其他文档- 或在未来添加。

    【讨论】:

    • 嗨弗兰克!谢谢您的回答。我用我用来检索我的 API 密钥的代码更新了我的帖子。我的 API 密钥是我的 Firestore 中唯一的数据。你还会推荐我使用“allow get: if true;”吗?
    猜你喜欢
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    • 2021-07-07
    • 2018-04-04
    • 1970-01-01
    • 2019-01-20
    相关资源
    最近更新 更多