我知道安全规则是保护数据的最安全方法,但是当用户单击特定元素时,它不支持我的方法来存储用户数据。这是因为如果我将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);
})
答案 0 :(得分:1)
您共享的代码确实似乎(与您的第一个question不同)不再向调用者公开您的Firebase项目的身份。因此,调用者无法从您共享的内容中确定数据库URL。
这是否足以满足您的需求,只有您自己可以确定。但请记住以下几点:
function verify(elementX, nameOfStyleToCheck) {
return elementX.classList.contains(nameOfStyleToCheck);
}
规则仍然允许他们读取所有数据并写入所需内容。