Firebase使用Socket.IO从客户端安全地向服务器发送请求到服务器吗?

时间:2020-05-25 00:15:16

标签: node.js firebase heroku firebase-realtime-database firebase-authentication

我知道安全规则是保护数据的最安全方法,但是当用户单击特定元素时,它不支持我的方法来存储用户数据。这是因为如果我将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);
})

1 个答案:

答案 0 :(得分:1)

您共享的代码确实似乎(与您的第一个question不同)不再向调用者公开您的Firebase项目的身份。因此,调用者无法从您共享的内容中确定数据库URL。

这是否足以满足您的需求,只有您自己可以确定。但请记住以下几点:

  • 如果用户可以通过其他方式找到数据库URL,则您的function verify(elementX, nameOfStyleToCheck) { return elementX.classList.contains(nameOfStyleToCheck); } 规则仍然允许他们读取所有数据并写入所需内容。
  • 您的代码允许将用户想要的任何内容写入数据库。您将需要在代码中或使用Firebase的服务器端安全规则将其锁定。
相关问题