1

我正在开发一个使用 socket.io 的实时网络应用程序。我担心的是,当在客户端通过 this 加载 socket.io js 文件时<script>/socket.io/socket.io.js</script>,它会将 io 实例公开为全局对象。现在,如果您打开 chrome 开发人员工具,您现在可以使用以下命令创建与服务器的连接

var socket = io.connect();

现在,任何人都可以发出事件并将恶意数据发送到正在侦听客户端发出事件的服务器。我在我的客户端代码中有这个作为示例:

(function (sio) {
    var socket = sio.connect();
    // some code here...
    // once a user submitted the comment, it will emit an comment:create event to the
    // server
    socket.emit("comment:create", comment);
}(io));

在 chrome 开发人员工具中,我可以创建一个连接,然后使用一些恶意参数发出相同的事件,这些参数可能会使我的应用程序崩溃,例如将 null 作为第二个参数传递。有没有办法防止这样的问题?

编辑:我当前的解决方案是在我的客户端代码中创建实例的本地副本,io然后将全局io对象设置为 null 以防止建立另一个连接。

4

1 回答 1

1

当客户端进行初始(HTTP)连接并将其存储为会话变量时,让您的服务器端代码创建某种(相当随机的)令牌。要求客户端将令牌包含在socket.io它发送的每条消息中,并拒绝任何不匹配的消息。

于 2012-10-01T09:20:24.630 回答