Javascript | 了解回调函数的安全性

bon*_*low 1 javascript node.js socket.io

我需要帮助来理解回调函数的安全性.我的情况是,我有一个客户端和服务器端代码,与socket.io连接.我的客户端正在使用socket.io向服务器发送一个对象,如果一切正常,回调必须回答.服务器调用方法,该方法返回true或false.如果是,则服务器必须回答.

我来自客户的电话:

socket.emit('client.to.server', {id: objID}, () => {
    console.log('this is my callback')
})
Run Code Online (Sandbox Code Playgroud)

Serverside socket.io事件:

socket.on('client.to.server', (dataObject, callback = null) => {
    let result = this.doSomething(dataObject, socket)
    if (result === true && (typeof callback === 'function')) callback()
})
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是:这是安全的吗?我的意思是,客户端正在向服务器发送一个回调函数,服务器调用服务器端的这个函数,如果有人操纵这个函数以某种方式向服务器发送一些污垢怎么办?我希望我能解释一下我的意思.

我知道我可以通过简单地从服务器发送到客户端来替换整个回调. 但更好的是什么?

Der*_*會功夫 5

客户端正在向服务器发送回调函数

你误会了.回调函数根本不会发送到服务器.流程实际上如下所示:

             client                                     server
 client sends data to server
socket.emit('client.to.server')
                       pushes to fifo queue[0]
                    ----------------------->
                                                server triggers listener
                                              socket.on('client.to.server')
                                               server sends data to client
                       pushes to fifo queue[1]
                    <-----------------------
  client triggers callback
() => console.log('this is my callback')
Run Code Online (Sandbox Code Playgroud)

套接字是一种消息传递机制.您只能通过它们传递可序列化的对象(二进制数据).

  • @Paulpro我怀疑回调函数是可序列化的,因为它包含太多的信息,如作用域. (2认同)