我有一个简单的加密货币应用程序,它使用 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';
}
}
答案 0 :(得分:3)
为了获得最佳安全性,请将您的安全规则视为应用程序逻辑的一部分,与应用程序代码处于同一级别。这意味着您的规则应该只允许您的应用程序代码需要的确切用法。
由于您没有分享相关代码,我将在下面做出一些假设和一般性建议。
如果您的代码对 get()
集合中的所有文档进行了 Data
调用,那么您当前的规则就是一个很好的代理。但是,例如,如果您的代码仅访问该集合中的单个文档,则这将是更接近的等价物:
allow get: if true;
这意味着代码可以获取单个文档,但无法获取集合中的所有文档。
如果您的代码仅访问特定文档,您可以进一步收紧规则,只允许他们阅读该文档,并进一步生成您在 Data
中可能拥有的其他文档现在收藏 - 或将来添加。