【发布时间】:2020-09-11 14:17:44
【问题描述】:
我了解安全规则是保护数据的最安全方式,但它不支持我在用户点击特定元素时存储用户数据的方法。这是因为如果我将 write == true 设为 true,他们就可以自愿更改数据库,而我不希望他们这样做;我只是想私下记录他们在我的网站上的输入。
因此,我的解决方案是在服务器上创建另一个数据库。在 server.js 文件上初始化 firebase 实时数据库。我认为这将是理想的,因为客户端无法访问任何凭据(是的,我知道,即使用户确实拥有它,它也没有那么糟糕,但以防万一)。
因此,如果我使用 socket.io 向客户端请求(他们看到的只是“socket.emit('value', 'value')),那么这不是安全的,因为他们没有看到任何相关的东西到firebase数据库,因为它都在服务器上(不向用户显示)?
我只想澄清这是否安全和理想,因为如果我忽略安全规则,它似乎在逻辑上有效。
向在我之前的帖子中回复的之前的用户道歉,这可能非常相似,但我已经详细说明了一点,以使我所做的事情更加清晰。
感谢您的所有帮助。
客户代码:
var a = 0;
socket.emit('value', a);
服务器代码:
firebase.initializeApp({
apiKey: VALUE,
authDomain: VALUE,
databaseURL: VALUE,
projectId: VALUE,
storageBucket: VALUE,
messagingSenderId: VALUE,
appId: VALUE,
measurementId: VALUE
});
socket.on('value', function(data) {
var ref = firebase.database().ref('node');
ref.set(data);
})
【问题讨论】:
-
我不清楚。所以你是说你只希望客户端从数据库中读取一些值而不是写入?
-
请记住,firebase 是可读写的。因此,当用户单击按钮时,它会使用套接字向服务器发送请求(如果已创建 firebase init)以与数据库进行交互。因此,我假设用户无法更改 firebase 数据库,因为它都在服务器上?因此,允许读和写是真的可以吗?希望这有点道理,我正在做一些非常奇怪但合理的事情。
-
如果你的安全规则允许读写,那么任何人都可以修改数据。 您 仅在您的服务器上执行此操作这一事实并不意味着其他人无法从他们想要的任何位置执行此操作。但是,如果您不从客户端写入,则客户端可能不知道数据库 URL,这为您提供了一种隐匿安全的形式。但是,如果不看看你是如何实现的,就不可能说出任何确定的东西。
-
但是如果他们没有关于数据库的信息(所有数据都隐藏在服务器上),他们如何访问数据库?任何人都可以读写,没错,但他们不知道数据库url,apikey,什么都没有。他们可以更改数据库的唯一方法是登录我的 firebase 帐户,这很困难。我是否错过了另一种客户端用户访问我的 firebase 数据库的方法?很抱歉有任何混淆。
-
在这一点上,我们需要看到一个最小的实现来说明更多。
标签: node.js firebase heroku firebase-realtime-database firebase-authentication