ele*_*nad 8 firebase firebase-security google-cloud-firestore
我将数据存储在 Cloud Firestore 数据库中。我的应用程序中的用户不需要创建帐户来获取数据,他们也可以在不登录的情况下写入数据。
谷歌每隔几天就会提醒我,我的数据库不安全,任何人都可以滥用。如何在不访问 Auth 变量的情况下改进它?
我的火力点规则
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write;
}
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在不使用身份验证的情况下使我的数据库更安全?
我的应用程序的逻辑:
我的数据库包含姓氏及其起源。如果有人输入姓名,他会从数据库中取回原名。示例:“Doe”->“墨西哥”。如果我的数据库中不存在姓氏,我会调用 API 并将值保存到我的数据库中。每个用户都需要读写权限。
我能在这里做什么?
由于您需要写入的操作是有限的(仅插入新项目),您有一些选择:
这是一个执行实时数据库写入的示例节点函数,当安全规则中的 read 和 write 都为 false 时它会成功(您关联的 package.json 显然需要依赖于 firebase-admin 和 firebase-functions):
const functions = require('firebase-functions');
// The Firebase Admin SDK to access the Firebase Realtime Database.
const admin = require('firebase-admin');
admin.initializeApp();
let db = admin.firestore();
// This pushes the "text" parameter into the RDB path /messages/(hash)/original
exports.addMessage = functions.https.onRequest(async (req, res) => {
// Grab the text parameter.
const original = req.query.text;
// Push the new message into the Realtime Database using the Firebase Admin SDK.
const snapshot = await admin.database().ref('/messages').push({original: original});
// Respond to the user (could also be a redirect).
res.send('got it: ' + snapshot.ref.toString());
});
Run Code Online (Sandbox Code Playgroud)
您可能想了解 firebase admin SDK 如何进行访问控制,但在云功能中,默认情况下您应该拥有管理员权限。
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read;
allow create;
}
}
}
Run Code Online (Sandbox Code Playgroud)
另外,请注意这适用于 firestore(您正在使用),但不适用于实时数据库。
显然,这两种方法都可能以某种方式被滥用以将大量数据写入您的数据库,尽管前者可以让您更好地控制允许的内容(例如,您可以防止超过 N 个条目,或每个条目超过 Y 个字节)。后者仍然允许任何人创建他们想要的任何内容。
归档时间: |
|
查看次数: |
4835 次 |
最近记录: |